WEB.XML
<!-- 登录过滤器 -->
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>pub.servlet.LoginFilter</filter-class>
<init-param>
<param-name>redirect</param-name>
<param-value>login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
java过滤器类
public class LoginFilter implements Filter {
private Logger logger = Logger.getLogger(LoginFilter.class);
private String redirect;
public void init(FilterConfig param) throws ServletException {
redirect = param.getInitParameter("redirect");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
HttpSession session = req.getSession();
StaffAdmin staff = (StaffAdmin)session.getAttribute("staff");
String path = req.getContextPath();
if(staff == null){
// if(isAjaxRequest(req)){
// res.setStatus(9999);
// RequestUtil.responseOut("GBK", "Login", res);
// }
String lastUrl = req.getRequestURI();
String lastQueryString = req.getQueryString()==null ? "":req.getQueryString();
req.setAttribute("lastUrl", lastUrl + "?" + lastQueryString);
logger.info("试图访问地址:"+req.getAttribute("lastUrl"));
// request.getRequestDispatcher("/"+redirect).forward(request, response);
res.sendRedirect(path+"/"+redirect);
}else{
chain.doFilter(request, response);
}
}
public void destroy() {
}
/** 针对jquery的ajax请求 */
private boolean isAjaxRequest(HttpServletRequest request) {
String header = request.getHeader("X-Requested-With");
return (header != null && "XMLHttpRequest".equals(header));
}
}
------解决方案--------------------------------------------------------
你还是好好看看你的过滤器那块的基础吧。
至于为什么,原因很简单。就是当你写成/* 时意味着你的过滤器要过滤所有的请求,而过滤完毕后肯定会返回到一个指定资源,这是又是访问某一个资源,你写的是拦截project下所以请求资源,所以又被拦截下来,然后。。。。你懂得。就这样进入死循环了。
如还有其他疑问或者需要咨询,欢迎加入我们的java开发联盟!
群号:
247286682
期待你的加入,来者请注明 csdn。