1.web.xml中配置
<!-- token filter-->
<filter>
<filter-name>tokenFilter</filter-name>
<filter-class>com.zpkj.template.filter.TokenFilter</filter-class>
<init-param>
<param-name>ignores</param-name>
<param-value>/app/register,/app/login</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>tokenFilter</filter-name>
<url-pattern>/app/*</url-pattern>
</filter-mapping>
2、Filter实现类中代码
public class TokenFilter implements Filter {
private String excludedPage;
private String[] excludedPages;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
excludedPage = filterConfig.getInitParameter("ignores");//此处的ignores就是在web.xml定义的名称一样。
if (excludedPage != null && excludedPage.length() > 0){
excludedPages = excludedPage.split(",");
}
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 定义表示变量 并验证用户请求URL 是否包含不过滤路径
boolean flag = false;
for (String page:excludedPages) {
if (request.getRequestURI().equals(page)){
flag = true;
}
}
if(flag){
chain.doFilter(request,response);
}
}
@Override
public void destroy() {
}
}
项目:template-副本
---------------------
作者:嘿hei
来源:CSDN
原文:https://blog.csdn.net/hei_guolanfang/article/details/79868932
版权声明:本文为博主原创文章,转载请附上博文链接!
第二种看起来逻辑更清晰的写法
我在项目中配置的过滤器设置的路径是/*,这意味着每一个资源都会被拦截,这时候如果我们想把一些资源拿出来不让其被拦截时(比如说某些css样式,js等静态文件),我们就需要在重写的过滤器的init方法中做些文章了:
首先,在init方法中,我们可以通过代码得到web.xml中filter的init-param中配置的不想被拦截的资源:
<init-param>
<param-name>ignores</param-name>
<param-value>/images,/js,/css,/LoginServlet,/login</param-value>
</init-param>
public void init(FilterConfig config) throws ServletException {
String cp = config.getServletContext().getContextPath();
String ignoresParam = config.getInitParameter("ignores");
String[] ignoreArray = ignoresParam.split(",");
for (String s : ignoreArray) {
prefixIignores.add(cp + s);
}
}
然后我们可以写一个是否被过滤的方法:
private boolean canIgnore(HttpServletRequest request) {
String url = request.getRequestURI();
for (String ignore : prefixIignores) {
System.out.println("url------------->"+url);
if (url.startsWith(ignore)) {
return true;
}
}
return false;
}
将该方法放入doFilter中:
if (canIgnore(request)) {
filterChain.doFilter(request, response);
return;
}
这样,我们就可以设置一些我们不需要拦截的资源啦!
参考文章:http://blog.csdn.net/u012246342/article/details/52228949
---------------------
作者:vince_Da
来源:CSDN
原文:https://blog.csdn.net/vince_Da/article/details/70665918
版权声明:本文为博主原创文章,转载请附上博文链接!