本文以spring为例,其他的框架原理相同,请自己查找
Spring3中通过mvc:interceptors标签配置拦截器
这个标签用于注册一个自定义拦截器或者是WebRequestInterceptors.
可以通过定义URL来进行路径请求拦截,可以做到较为细粒度的拦截控制。
例如在配置文件加入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 以下配置将拦截所有的URL请求 -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!-- 以下配置将拦截特有的URL请求 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/secure/*"/>
<bean class="org.example.SecurityInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/admin/*.do"/>
<bean class="org.example.admin.ControlInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
</beans>
定义的拦截器只需要实现@Override
public boolean preHandle(HttpServletRequest req,HttpServletResponse res, Object handler)
举一个实际的例子进行说明:
1、spring-mvc.xml配置文件中
<!-- 用户登录校验 -->
<mvc:interceptors>
<bean class="com.shxt.framework.utils.LoggedInterceptor"></bean>
</mvc:interceptors>
2、对应的拦截器类:
@Repository
public class LoggedInterceptor extends HandlerInterceptorAdapter {
/**
* action之前执行
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 后台session控制
String[] noFilters = new String[] { "login", "handle" }; //url中如果有login和handle不拦截
String uri = request.getRequestURI();
if (uri.indexOf("common") != -1) {
boolean beFilter = true;
for (String s : noFilters) {
if (uri.indexOf(s) != -1) {
beFilter = false;
break;
}
}
if (beFilter) {
Object obj = request.getSession().getAttribute(SystemConstants.LOGINED);
if (null == obj) {
// 未登录
PrintWriter out = response.getWriter();
StringBuilder builder = new StringBuilder();
builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
builder.append("alert(\"页面过期,请重新登录\");");
builder.append("window.top.location.href=\"");
builder.append(SystemConstants.BASEPATH); //这里是http://ip:port/项目名
builder.append("/common/user/login\";</script>"); //这里是重新登录的页面url
out.print(builder.toString());
out.close();
return false;
}
}
}
return super.preHandle(request, response, handler);
}
/**
* 生成视图之前执行
*/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
/**
* 最后执行,可用于释放资源
*/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
3、配置session的有效期
在web.xml中添加
<session-config>
<session-timeout>30</session-timeout>
</session-config>
在30分钟之内session有效,在测试的时候可以讲其改为1,一分钟之后再访问,就会弹出提示“重新登录”的窗口
相关推荐
本篇文章将详细讲解如何利用Jfinal的拦截器机制实现登录验证,确保用户在访问特定控制层方法之前必须完成登录。 首先,理解拦截器的概念至关重要。在Web开发中,拦截器是一种设计模式,它允许我们在请求被处理之前...
2. **作用**:拦截器可以用于日志记录、性能监控、事务管理、权限验证等多种场景。在用户权限登录的场景中,拦截器可以检查用户是否已经登录,如果没有登录,则阻止访问受保护的资源。 ### 二、创建拦截器 1. **...
总结,jFinal的拦截器机制为我们提供了一种优雅的方式来验证用户登录状态,从而保护应用程序的敏感数据。通过创建拦截器,检查登录状态,并在必要时重定向或抛出错误,我们可以确保只有经过验证的用户才能访问受保护...
通过这样的设置,Struts2的拦截器就能够帮助我们在用户登录成功后,将其重定向回他们最初尝试访问的页面,提供更好的用户体验。同时,这种方法也使得代码更易于维护,因为登录逻辑与具体业务Action分离,遵循了单一...
例如,对于没有登录或登录超时的用户,应直接跳转到登录页面,这可以通过在后端的跳转逻辑中加入登录状态的验证来实现。 ### 总结 在Vue项目中,整合axios不仅能够提升HTTP请求处理的效率,还能增加应用的安全性。...
本文将深入探讨如何使用Struts2结合session来实现用户登录检查。 首先,我们需要理解session的概念。在Web开发中,session是一种服务器端存储用户状态的方式。当用户登录后,服务器会为该用户创建一个session,并将...
在这个架构中,“登陆拦截器”扮演着至关重要的角色,它负责在用户尝试访问特定资源前进行身份验证和授权。在本场景中,我们将深入探讨SSH框架中的拦截器机制以及如何实现一个简单的登录功能来连接数据库。 首先,...
在 SpringMVC 的框架下,我们通常利用拦截器(Interceptor)来实现这一功能,因为拦截器可以对所有请求进行预处理,从而实现对特定请求的拦截和控制。 首先,我们需要了解 SpringMVC 拦截器的工作机制。SpringMVC ...
本文深入探讨如何利用Struts2的拦截器特性实现有效的登录验证,包括超时后的跳转处理。 #### 一、拦截器的概念 拦截器(Interceptor)是Struts2框架中的关键组件之一,用于在执行Action之前或之后进行一系列的...
SpringBoot结合Redis实现幂等性拦截器是一种常见的解决方案。以下将详细阐述这个方案的实施步骤和关键点: 1. **幂等性原理**: - 在函数式编程中,幂等性意味着无论调用一个函数多少次,其结果始终相同,没有副...
- **身份验证与授权**:在请求发送前,拦截器可以检查是否携带了必要的身份验证信息,如Token,如果缺失则自动添加。 - **数据转换**:可以对请求或响应的数据进行格式化,例如JSON到对象的转换。 - **日志记录**...
一个常见的应用是实现登录拦截器,确保只有已登录的用户才能访问特定的资源。如`LoginInterceptor`类所示,它继承自`HandlerInterceptorAdapter`,并在`preHandle`方法中检查用户的登录状态。如果请求的URL是登录...
在本场景中,"ssh写的用户登录权限实现"指的是使用SSH协议来控制用户登录的权限,确保在同一时间只有一个用户能够使用特定的账号登录系统。这种机制可以防止未经授权的并发登录,增加系统的安全性。 Struts2、...
如果不存在,表示用户没有登录或者session已经过期,此时拦截器会拦截请求,并通过客户端的JavaScript弹出提示框,通知用户重新登录,并通过`window.location.href`指向注销路径`/user/logout`,从而实现对未登录或...
3. **编写Service**:在业务逻辑层,实现用户登录、获取用户角色及权限、动态加载菜单等功能。登录时,通过Shiro进行认证,成功后获取用户的角色和对应的权限。 4. **创建Controller**:在控制器层,处理前端的登录...
总的来说,.NET MVC的授权过滤器是实现用户登录验证的关键组件。通过自定义这个过滤器,我们可以灵活地控制应用程序的访问权限,保证系统的安全性。同时,结合不同的身份验证策略,可以满足各种应用场景的需求。
可以创建自定义的拦截器来检查Session中是否有已登录的用户,或者直接在Action中进行验证。 5. **数据验证**:在Action的`login()`方法中,需要对用户输入的数据进行校验。可以使用Struts2的Validator框架,通过...
拦截器允许我们对网络请求和响应进行拦截、修改或处理,从而实现日志记录、认证、缓存等多种功能。这里我们将深入探讨OkHttp中的拦截器机制及其应用场景。 OkHttp是Java和Android开发中广泛使用的HTTP客户端库,它...
在JSP页面中,通常使用表单提交用户登录信息到Servlet。Servlet验证用户凭证后,会在Session中存储用户信息,并在响应中设置全局Cookie。JSP页面则可以通过EL(Expression Language)或JSTL标签来获取Session中的...