第一步:书写过滤器类,过滤器必须继承org.springframework.web.servlet.handler.HandlerInterceptorAdapter并重写preHandle方法。
/**
* 检测是否已经登录
* <p>Title:SecurityInterceptor </p>
* <p>Description: </p>
* @author zhanghaodong
* @date 2015年11月27日 上午11:18:56
*/
public class SecurityInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if((request.getContextPath().replace("/", "")).equals((request.getRequestURI().replace("/", "")))){
return true;
}
HttpSession session = request.getSession(true);
// 从session 里面获取用户名的信息
Object obj =session.getAttribute(WebCnts.SESSION_KEY_LOGINUSER);
// 判断如果没有取到用户信息,就跳转到登陆页面,提示用户进行登陆
if (obj == null || "".equals(obj.toString())) {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
StringBuilder builder = new StringBuilder();
builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
builder.append("alert(\"登录已过时,请重新登陆!\");");
builder.append("parent.window.location.href='"+request.getContextPath()+"/login';");
builder.append("</script>");
out.print(builder.toString());
out.close();
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest req, HttpServletResponse res, Object arg2, ModelAndView arg3) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest req, HttpServletResponse res, Object arg2, Exception arg3) throws Exception {
}
}
第二步:在spring-mvc.xml文件中添加下面代码(过滤的路径)
<mvc:interceptors>
<mvc:interceptor>
<!--过滤所有的路径 -->
<mvc:mapping path="/**"/>
<!--去掉不需要进行过滤的路径,如:静态的路径 -->
<mvc:exclude-mapping path="/login"/>
<mvc:exclude-mapping path="/plugins/**"/>
<mvc:exclude-mapping path="/public/**"/>
<mvc:exclude-mapping path="/upload/**"/>
<mvc:exclude-mapping path="/getCaptha"/>
<mvc:exclude-mapping path="/demo/*.json"/>
<bean class="com.hiersun.ecommerce.security.SecurityInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
分享到:
相关推荐
"项目访问时间过长session过期提醒"这个话题涉及到的是如何配置Web应用程序,以便在用户的会话过期时自动跳转到特定的过期页面,提醒用户重新登录。下面我们将详细讲解实现这一功能的关键步骤和技术。 首先,我们...
因此,通常我们会采用过滤器(Filter)的方式来处理Session过期后的跳转。在`web.xml`中,我们需要配置一个名为`sessionFilter`的过滤器,指定对应的Filter类: ```xml <filter-name>sessionFilter ...
在 Sticky Session 模式下,客户端的请求会尽可能地路由到创建该Session的服务器,只有在Session过期或服务器故障时才需要使用Redis中的Session数据。 综上所述,本项目展示了如何在Spring Boot应用中集成Spring ...
- `destroy()` 方法在服务器停止或者重新加载时调用,用于释放过滤器所占用的资源。 综上所述,通过使用这些特定功能的过滤器,开发者可以在不修改具体业务逻辑的情况下对整个Web应用进行增强和优化,从而提高系统...
例如,在拦截器的`preHandle()`方法中,检查当前请求的Session是否有效,如果发现Session已经过期,就通过`response.sendRedirect(String url)`重定向到登录页面。 在这个项目中,开发者可能已经实现了这些功能,但...
如果不存在或者登录信息过期,则重定向到登录页面。 3. **权限判断**:在`Filter`中,可以进一步检查请求的资源是否允许当前用户访问。这可以通过比较用户角色、权限码或其他业务规则来完成。 4. **拦截非授权访问...
在J2EE应用程序中,处理用户会话是至关重要的,特别是在多服务器环境下,为了确保用户在不同服务器之间切换时能够保持其登录状态和购物车等信息。这就是session管理的用武之地。本项目通过结合使用Filter(过滤器)...
综上所述,通过使用过滤器来处理session过期后的重定向,并结合JavaScript来控制iframe框架的跳出和页面的刷新,可以有效地解决JSP应用中的会话管理和页面布局问题。这不仅可以提升系统的安全性,同时也能改善用户...
在Java Web开发中,Servlet过滤器是一种非常重要的机制,它可以在请求到达目标资源(如Servlet或JSP页面)之前或者响应返回客户端之前进行预处理或后处理。下面详细介绍几种常见的Servlet过滤器及其作用。 #### 一...
1. **Session复制**:当用户的请求被Filter捕获时,Filter可以负责将当前Session的状态复制到分布式存储中,如Redis或Memcached,确保多台服务器间的数据同步。 2. **Session粘滞性**:为了减少网络延迟,可以采用...
接下来,文章中提到了强制之前登录的session过期的场景。当用户重复登录时,为了保证系统的安全性,有必要使得之前的session失效。这通常可以通过在拦截器中获取当前的session,然后通过调用session的invalidate方法...
3. 定义过滤器链,配置需要拦截的URL及其对应的过滤器。 4. 在Spring Boot的启动类上添加注解@EnableShiro,启用Shiro配置。 Vue作为前端框架,可以通过Axios等库发送带Token的请求。同时,前端也可以根据Shiro返回...
根据给定的信息,本文将详细解释两个主要的Java Web过滤器:`ForceNoCacheFilter` 和 `CheckLoginFilter` 的工作原理与应用方法。 ### 一、`ForceNoCacheFilter` 过滤器 #### 1. 功能概述 `ForceNoCacheFilter` 是...
- **过滤器(Filter)**:使用Servlet Filter可以在每次请求到达时检查Session,如果发现有重复登录,处理逻辑可以强制旧会话的用户退出。 5. **测试文件"testSession"**: 这个文件可能是用于测试Session管理...
5. **处理SSO逻辑**:在应用的过滤器链中,添加Shiro的`RememberMeFilter`和`SessionValidationFilter`,确保会话的有效性和用户登录状态的持久化。 最后,测试和优化SSO系统: 1. **测试登录流程**:确保用户在...
- Spring Security包含一系列过滤器链,如`UsernamePasswordAuthenticationFilter`和`AnonymousAuthenticationFilter`,它们处理HTTP请求并进行身份验证和授权。 - `SecurityContextHolder`上下文持有当前用户的...
- 在`onAfterAjax`回调中,检查响应的状态码和响应体,如果符合会话过期的条件(如状态码为401或403,或者服务器返回特定的错误信息),则使用`window.location.href`来改变当前页面的URL,将其指向登录页面。...
例如,当 Token 过期时,服务器可以返回一个特定的状态码,客户端收到后可以重新发起登录请求获取新的 Token。 总之,"shiro+token" 的结合是现代 Web 应用实现安全登录和认证的一种常见方式。Apache Shiro 提供了...
通常,这可以通过在应用程序的入口点或者过滤器(如Spring MVC中的Filter)来实现。当用户试图访问特定页面或服务时,客户端会检查当前的会话状态。 2. **判断局部会话**:在拦截请求后,客户端会检查用户的局部...
可以根据需求自定义过滤器,例如实现登录拦截、权限校验等。在`shiro.ini`配置文件或Java配置中定义过滤器链,指定过滤器的执行顺序和处理逻辑。 **7. 安全会话管理** Shiro提供了会话管理功能,可以控制会话超时、...