NutzCN Logo
问答 nutzboot 自定义filter不工作
发布于 1640天前 作者 天空 1463 次浏览 复制 上一个帖子 下一个帖子
标签:
package cn.test.filter;

import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.DispatcherType;
import javax.servlet.Filter;

import org.nutz.boot.starter.WebFilterFace;
import org.nutz.ioc.Ioc;
import org.nutz.ioc.impl.PropertiesProxy;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@IocBean
public class WxFilterStarter implements WebFilterFace {

	private static final Logger logger = LoggerFactory.getLogger(WxFilterStarter.class);

	@Inject("refer:$ioc")
	protected Ioc ioc;

	@Inject
	protected PropertiesProxy conf;

	@Override
	public String getName() {
		return "WxFilter";
	}

	@Override
	public String getPathSpec() {
		return "/*";
	}

	@Override
	public EnumSet<DispatcherType> getDispatches() {
		return EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE);
	}

	@IocBean(name = "wxFilter")
	public WxFilter createNutFilter() {
		return new WxFilter();
	}

	@Override
	public Filter getFilter() {
		return ioc.get(WxFilter.class, "wxFilter");
	}

	@Override
	public Map<String, String> getInitParameters() {
		return new HashMap<String,String>();
	}

	@Override
	public int getOrder() {
		return 60;
	}

}

package cn.test.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class WxFilter implements Filter  {

	private static final Logger logger = LoggerFactory.getLogger(WxFilter.class);

//	@Inject("refer:$ioc")
//	protected Ioc ioc; 
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		logger.debug("\r\n=======================================filter init...");
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub

		logger.debug("\\r\\n=======================================filter doFilter...");
		
		 HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        String contextPath = req.getContextPath();
	        
        System.err.println(contextPath);
        
		chain.doFilter(request, response);
	}

	@Override
	public void destroy() {

		logger.debug("\\r\\n=======================================filter destroy...");
	}

}

可以出现“==filter init...”,但访问网址时,不调用doFilter()
现在Nutzboot只能直接加Filter吗,有没有Nutz的MVC里自己的Filter链?
请指点下

7 回复

优先级问题吧

来自炫酷的 NutzCN

nutz mvc的动作链和action filter依然可用

来自炫酷的 NutzCN

哦,谢谢
优先级就是getOrder给的值吧,减少?
我也试试action filter模式。

getOrder()返回49就可以进入了。
也就是少于int NutFilter = 50;这个50值就可以。
之前没细看,以为自定义是填最大的值。

@wendal
兽总,之前ActionFilter在MainModule里做注解添加
@Filters({@By(type=MyFilter.class)
现在Nutzboot是在那里做添加?
另这类应用问题,有没有相关文档可以查阅?谢谢

@qq_f9362623 均可用

来自炫酷的 NutzCN

可以了!
在MainLauncher类上标注

@Filters({@By(type=WxActionFilter.class)})

谢谢兽总~

添加回复
请先登陆
回到顶部