我是否需要检查Spring中每个控制器的有效会话?

时间:2014-02-06 00:07:13

标签: java spring spring-mvc spring-security

假设在Spring Mvc的Web应用程序中,我们是否需要检查每个控制器或jsps中的有效会话?如何在MVC中解决此会话管理问题?我们基本上做什么? 还有哪些可以为我的应用程序增加额外的安全性?

4 个答案:

答案 0 :(得分:2)

我们通常检查会话是否在过滤器层中过期并将其映射到DispatcherServlet,这样,将由spring处理的所有传入请求将首先被过滤,因此不允许任何交互如果会话已经过期,则为spring controller。如果发现会话已过期,请将重定向发送到页面,在该页面中将通知用户其会话已过期。

示例过滤器代码

public class MyFilter implements Filter{
    ...
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        if (isSessionExpired((HttpServletRequest) theRequest)) {
            response.sendRedirect(((HttpServletRequest) theRequest).getContextPath() + "/expired.jsp");
            response.flushBuffer();
        }else{
            //..its not yet expired, continue
            theChain.doFilter(theRequest, theResp);
        }
    }
    ...
}

映射到web.xml中的DispatcherServlet

    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.mycompany.ourproject.filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <servlet-name>springdispatcher</servlet-name>
    </filter-mapping>

    <servlet>
        <servlet-name>springdispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

答案 1 :(得分:0)

您想在每个控制器的每个会话中检查授权或身份验证吗?你可以使用aspectj。

答案 2 :(得分:0)

您可以查看spring的会话管理参考指南,配置非常简单并且直接http://docs.spring.io/autorepo/docs/spring-security/3.0.x/reference/session-mgmt.html

答案 3 :(得分:0)

不,您不需要在Spring中检查每个控制器中的有效会话。

Spring框架使会话管理变得非常简单,因为您可以在单个xml文件中配置spring安全性,spring将负责管理会话。

Check out these examples on spring