我想在LoginController之前在我的自定义过滤器中做一些事情。但是,执行日志仅为login
。为什么结果不是filter
+ login
?非常感谢!
我输入http://localhost:8080/ContextRoot/login
的web.xml
...
<filter>
<filter-name>SessionExpiredFilter</filter-name>
<filter-class>com.test.filter.SessionExpiredFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionExpiredFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
<security-constraint>
<web-resource-collection>
<web-resource-name>all resources</web-resource-name>
<description>all resources</description>
<url-pattern>/login</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
</web-resource-collection>
<auth-constraint>
<description>Constraint</description>
<role-name>user</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login</form-login-page>
<form-error-page>/login?=error</form-error-page>
</form-login-config>
</login-config>
LoginController.java
@RequestMapping(value = "/login")
public String login(HttpSession session) {
log.info("login");
if (session.getAttribute("login") != null) {
log.info("login already , redirect to index");
return "index";
}
return "login";
}
SessionExpiredFilter.java
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
log.info("filter");
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if ("true".equals(req.getAttribute("login"))) {
chain.doFilter(request, response);
} else {
res.sendRedirect("login");
}
}