我正在尝试学习过滤器的使用。我通过指定url-pattern创建了一个应用程序范围的过滤器:
<filter>
<display-name>AuthenticationFilter</display-name>
<filter-name>AuthenticationFilter</filter-name>
<filter-class>learn.filters.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthenticationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我已将welome-file设置为:
<welcome-file-list>
<welcome-file>/WEB-INF/jsp/home.jsp</welcome-file>
</welcome-file-list>
我的doFilter代码如下:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
String username=(String)req.getSession().getAttribute("username");
if(username==null && req.getParameter("username")==null){
req.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
}else{
String user=req.getParameter("username");
String pass=req.getParameter("password");
if(user==null){
req.getRequestDispatcher("/WEB-INF/jsp/home.jsp").forward(request, response);
}else{
if(user.equals(pass)){
req.getSession().setAttribute("username", user);
res.sendRedirect("home");
}
}
}
此代码工作正常并对用户进行身份验证,但我的login.jsp页面上的任何额外资源(如js文件)都不会导入,因为每个请求都会返回登录页面。这意味着如果用户未经过身份验证,我无法访问我的网络应用程序的任何资源,如captcha,js,css文件。请建议
答案 0 :(得分:0)
过滤器设置为映射到-everything-。也许您只想将它映射到* .jsp,因此它不会触发静态资源,如html文件,javascript文件,css文件,图像等。
答案 1 :(得分:0)
您可以为.js和.css等设置模式匹配并跳过它们。
您也可以检查this