下面是我拦截器的代码。
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 获得在下面代码中要用的request,response,session对象
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
HttpSession session = httpRequest.getSession(true);
String[] str = {"login","docs"}; // 路径中包含这些字符串的,可以不用登录直接访问
StringBuffer url = httpRequest.getRequestURL();
// 特殊用途的路径可以直接访问
if (str != null && str.length > 0) {
for (String s : str) {
if (url.indexOf(s) >= 0) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}
}
}
// 从session中获取用户信息
String loginInfo = (String) session.getAttribute("username");
if (null != loginInfo && !"".equals(loginInfo)) {
// 用户存在,可以访问此地址
filterChain.doFilter(servletRequest, servletResponse);
} else {
// 用户不存在,踢回登录页面
// String a = httpRequest.getContextPath()+"/login/notLogin";
servletRequest.getRequestDispatcher("/login/notLogin").forward(servletRequest, httpResponse);
return;
}
}
这里是我web.xml的配置
<!-- 登录过滤器 -->
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>aa.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/aa/*</url-pattern>
<url-pattern>/bb/*</url-pattern>
<url-pattern>/cc/*</url-pattern>
<url-pattern>/dd/*</url-pattern>
<url-pattern>/ee/*</url-pattern>
</filter-mapping>
接口是restful接口。
有大神知道原因吗?