在web.xml中配置:
<filter>
<filter-name>Check Session Timeout</filter-name>
<filter-class>com.utils.filter.SessionTimeoutFilter</filter-class>
<init-param>
<param-name>loginPage</param-name>
<param-value>login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Check Session Timeout</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Check Session Timeout</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Check Session Timeout</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
过滤器类:
public class SessionTimeoutFilter implements Filter{
public String loginPage = null;
public void init(FilterConfig config) throws ServletException {
loginPage=config.getInitParameter("loginPage");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("P3P", "CP=CAO PSA OUR");
HttpSession session = req.getSession(false);
boolean flag = false;
String targetURL = req.getRequestURI();
if (session != null && session.getAttribute("username_phone") != null) {
flag = true;
}else if(targetURL.endsWith(loginPage)) {
flag = true;
}else {
String BasePath = null;
if (req.getContextPath().equals("")){
BasePath = req.getScheme() + "://" + req.getServerName()
+ ":" + req.getServerPort() + "/login.jsp";
}
else{
BasePath = req.getScheme() + "://" + req.getServerName()
+ ":" + req.getServerPort() + req.getContextPath()
+ "/login.jsp";
}
res.sendRedirect(BasePath);
return;
}
if (!flag) {
/*java.io.PrintWriter writer = res.getWriter();
writer.print("<script language=\"javascript\">");
writer.print("if(window.parent==null){");
writer.print("window.open(\"" + req.getContextPath() + "/login.jsp"
+ "\");");
writer.print("}else{");
writer.print("window.parent.top.location.href=\""
+ req.getContextPath() + "/login.jsp" + "\";}");
writer.print("</script>");
writer.flush();*/
return;
} else {
chain.doFilter(request, response);
}
}
public void destroy() {
this.loginPage=null;
}
}
分享到:
相关推荐
在ASP.NET Core中,Session的实现依赖于中间件(Middleware),并且可以与多种存储机制集成,包括内存、数据库或Redis缓存。 首先,我们要安装必要的NuGet包来启用Session功能。这两个关键的包是: 1. `Microsoft....
在本例中,我们将探讨如何实现这样一个过滤器以及相关的配置。 首先,`web.xml` 是Java Web应用程序的部署描述符,用于定义过滤器、Servlet、监听器等组件。在提供的`web.xml`配置中,我们看到了一个名为`...
7. **最后,将配置应用于Web应用**:在Web应用的`web.xml`或Spring配置文件中,将上述Shiro配置应用到过滤器链中。 通过以上步骤,Shiro将与Redis协同工作,实现分布式环境下的Session管理。这种方案不仅解决了传统...
<property name="globalSessionTimeout" value="3600000" /> ``` 然后,我们需要在Spring MVC的配置文件中,设置过滤器链来启动Shiro的功能。Shiro提供了多种内置过滤器,如authc(认证过滤器)、perms(权限过滤...
以上代码片段展示了如何通过过滤器实现Session过期后的自动跳转。这种方式更加灵活,可以直接控制HTTP响应,确保用户在Session过期后能够被正确地引导回登录页面,重新验证其身份。在实际应用中,还需要考虑其他因素...
.sessionTimeout(30, TimeUnit.MINUTES) .withHttpSessionSupport(true) .setChangeSessionIdOnCreation(true); } } ``` 5. **测试验证**: 创建一个简单的Controller,检查Session是否能在多个服务器实例间...
接着,设置Shiro的过滤器链,以便拦截并处理请求。 - **Shiro与Redis**:为了实现会话管理,我们可以将Shiro的Session管理委托给Redis,这需要配置RedisSessionDAO,将Session数据存储在Redis中,实现分布式会话。...
在实际应用中,根据数据格式选择合适的过滤器,可以有效地处理网络传输中的数据。 总结一下,这个"Mina开发实例"涵盖了如何使用Apache Mina创建服务端和客户端,通过Maven构建项目,并实现长连接通信。通过学习和...
过滤器可以用来对客户端请求和服务器响应进行预处理或后处理,非常适用于身份验证、日志记录等功能。 ```xml <filter-name>FilterSource <filter-class>project4.FilterSource <filter-name>FilterSource ...
1. **Servlet 2.5支持**: Tomcat 6.0支持Servlet 2.5规范,带来了许多新功能和改进,如注解支持、过滤器链的改进等。 2. **JSP 2.1支持**: 提供了对JSP 2.1规范的支持,包括EL(Expression Language)增强和自定义...
- `web.xml`: 每个Web应用的部署描述符,配置Servlet、过滤器、监听器等。 - `context.xml`: 应用级别的配置,可以用于定义数据源、session配置等。 **6. 安全性** Tomcat 6支持角色基础的访问控制(RBAC)、SSL/...
**配置Servlet过滤器(3.2.1)** ```xml <filter-name>myFilter <filter-class>com.example.MyFilterClass</filter-class> <filter-name>myFilter <url-pattern>/servletPath ``` **配置Servlet(3.2.2)**...