为什么我的自定义过滤器无法执行?

时间:2014-10-04 12:33:11

标签: java xml spring-mvc servlet-filters

我想在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");
    }
}

0 个答案:

没有答案