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