怎么为filter-mapping中的/*设置例外
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么为filter-mapping中的/*设置例外相关的知识,希望对你有一定的参考价值。
在web.xml声明的一个filter中:<!– session过滤filter –>
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>
com.iqbon.jcms.web.util.SessionFilter
</filter-class>
<init-param>
<param-name>excludedPages</param-name>
<param-value>/admin/login.do</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
可以看到url-pattern的设置里面过滤的url规则是/admin/*,如果要把/admin/login.do排除在过滤url之外。
可以结合init-param的初始化参数和HttpServletRequest的getServletPath()方法来判断。
首先加上初始化参数:
<init-param>
<param-name>excludedPages</param-name>
<param-value>/admin/login.do</param-value>
</init-param>
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 javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import com.iqbon.jcms.util.KeyConstant;
/**
* session过滤器
*/
public class SessionFilter implements Filter
/**
* 需要排除的页面
*/
private String excludedPages;
private String[] excludedPageArray;
/**
* @see Filter#destroy()
*/
public void destroy()
return;
/**
* 对session进行判断当前访问是否有登录
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
boolean isExcludedPage = false;
for (String page : excludedPageArray) //判断是否在过滤url之外
if(((HttpServletRequest) request).getServletPath().equals(page))
isExcludedPage = true;
break;
if (isExcludedPage) //在过滤url之外
chain.doFilter(request, response);
else //不在过滤url之外,判断session是否存在
HttpSession session = ((HttpServletRequest) request).getSession();
if (session == null || session.getAttribute(KeyConstant.SESSION_KEY_USER) == null)
((HttpServletResponse) response).sendRedirect(“/login.htm”);
else
chain.doFilter(request, response);
/**
* 初始化函数,获取需要排除在外的url
*/
public void init(FilterConfig fConfig) throws ServletException
excludedPages = fConfig.getInitParameter(“excludedPages”);
if (StringUtils.isNotEmpty(excludedPages))
excludedPageArray = excludedPages.split(“,”);
return;
参考技术A XML code <filter>
<filter-name>isLogin</filter-name>
<filter-class>ClassName</filter-class>
<init-param>
<param-name>redirectURL</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filter>
以上是关于怎么为filter-mapping中的/*设置例外的主要内容,如果未能解决你的问题,请参考以下文章
使用 Tomcat,@WebFilter 不适用于 web.xml 中的 <filter-mapping>
<servlet-name> 在 web.xml 的 <filter-mapping> 中,这是啥意思?
cvc-complex-type.2.3:Element ‘filter-mapping‘ cannot have character [children],because the type‘s co