小弟刚开始学servlet,jsp,然后做一个Filter的实验,检查用户是否登陆,没登陆的话就引导回登陆页面,但是配置以后,就无法登陆资源
这是filter class
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
String str = (String)session.getAttribute("user");
String url = req.getRequestURI();
//if session is null ,redirect to login
//ManageServlet是处理登陆用的,index.html是登陆界面,WAEAssign是主资源地址
if (str == null && !url.endsWith("ManageServlet") &&!url.endsWith("WAEAssign")){
res.sendRedirect("index.html");
} else {
chain.doFilter(request, response);
res.setHeader("Cache-Control","no-store");
res.setDateHeader("Expires",0);
res.setHeader("Pragma","no-cache");
res.flushBuffer();
}
} 这里是filter的web.xml配置<filter>
<filter-name>UsersFilter</filter-name>
<filter-class>com.labAdmin.filter.UsersFilter</filter-class>
</filter> <filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 把web.xml注释掉就能访问,主地址是http://localhost:8080/WAEAssign/ ,ManageServlet是处理登陆的servlet,应该是让filter在这之后起作用 ,谢谢各位
这是filter class
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
String str = (String)session.getAttribute("user");
String url = req.getRequestURI();
//if session is null ,redirect to login
//ManageServlet是处理登陆用的,index.html是登陆界面,WAEAssign是主资源地址
if (str == null && !url.endsWith("ManageServlet") &&!url.endsWith("WAEAssign")){
res.sendRedirect("index.html");
} else {
chain.doFilter(request, response);
res.setHeader("Cache-Control","no-store");
res.setDateHeader("Expires",0);
res.setHeader("Pragma","no-cache");
res.flushBuffer();
}
} 这里是filter的web.xml配置<filter>
<filter-name>UsersFilter</filter-name>
<filter-class>com.labAdmin.filter.UsersFilter</filter-class>
</filter> <filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 把web.xml注释掉就能访问,主地址是http://localhost:8080/WAEAssign/ ,ManageServlet是处理登陆的servlet,应该是让filter在这之后起作用 ,谢谢各位
if (str == null && !url.endsWith("ManageServlet") &&!url.endsWith("WAEAssign")){
res.sendRedirect("index.html");
}
在 if 里面的条件 改为if(str==null || str=="" && ..........)就可以了, 因为,如果是输入框,传过来的 字符串是"" 而不是 null
应该是 res.sendRedirect("index.html"); 出了问题。不过还也是要 在 if 里加个 && !url.endwiths(index.html).
或者用 res.getRequestDispatcher("index.html").forward(res,req) .