下面简要写一个session拦截器的具体代码实现:
1、java代码实现
会话拦截器代码:
public class SessionInterceptor extends AbstractInterceptor{
Logger log = Logger.getLogger(SessionFilter.class);
@Override
public String intercept(ActionInvocation invoc) throws Exception {
ActionSupport action = (ActionSupport) invoc.getAction();
String ns = invoc.getProxy().getNamespace();
String actionName = invoc.getProxy().getActionName();
String methodName = invoc.getProxy().getMethod();
if(log.isInfoEnabled()){
log.info("执行" + ns + actionName + "的" + methodName + "方法");
}
if(action instanceof SysUserAction){
if("login".equalsIgnoreCase(methodName)){
return invoc.invoke();
}
}
Object obj = invoc.getInvocationContext().getSession().get("user");
if(obj == null){
log.error("用户无效或者Session过期,将返回登录页面");
action.addActionError("用户无效或者Session过期");
return ActionSupport.INPUT;
}else{
return invoc.invoke();
}
}
}
日志拦截器的部分代码:
public String intercept(ActionInvocation invoc) throws Exception {
if (!flag) {
return invoc.invoke();
}
ActionSupport action = (ActionSupport) invoc.getAction();
String ns = invoc.getProxy().getNamespace();
String actionName = action.getClass().getName();
String methodName = invoc.getProxy().getMethod();
long before = System.currentTimeMillis();
log.info("拦截[" + ns + actionName + "]的方法[" + methodName + "]");
try {
SystemLog sysLog = null;
String ret = null;
// 系统登录
if ("login".equalsIgnoreCase(methodName)) {
ret = invoc.invoke();
SysUserAction ba = (SysUserAction) invoc.getAction();
SysUser user = (SysUser) ba.getSession().getAttribute("user");
if (user == null) {
user = new SysUser();
user.setUserName(ba.getLoginname());
sysLog = writeLog(user, LOGIN, 0);
} else {
sysLog = writeLog(user, LOGIN, 1);
}
}
// 系统退出
else if ("logout".equalsIgnoreCase(methodName)) {
SysUserAction ba = (SysUserAction) invoc.getAction();
SysUser user = (SysUser) ba.getSession().getAttribute("user");
ret = invoc.invoke();
if(ba.getSession().getAttribute("user") != null){
sysLog = writeLog(user, LOGOUT, 0);
}else{
sysLog = writeLog(user, LOGOUT, 1);
}
}
sysLog.setWorkInfo(sysLog.getWorkInfo()
+ (sysLog.getWorkState() == 1 ? "成功" : "失败"));
systemLogService.saveLog(sysLog);
long after = System.currentTimeMillis();
log.info("记录日志成功,共耗时为(ms):" + (after - before));
return ret;
} catch (Exception e) {
log.error("记录日志出现异常,异常如下:" + e.getMessage());
e.printStackTrace();
return BaseAction.ERROR;
}
}
2、strut2拦截器的配置
在strut.xml文件中加入如下配置
<interceptors>
<!-- 判断Session有效性的拦截器 -->
<interceptor name="sessionInterceptor"
class="cn.com.core.SessionInterceptor "/>
<!-- 记录日志的拦截器 -->
<interceptor name="logInterceptor"
class="cn.com.xinli.ccp.core.LogInterceptor">
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="sessionInterceptor"/>
</interceptor-stack>
<interceptor-stack name="myLogStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="logInterceptor"/>
</interceptor-stack>
</interceptors>
<!--默认session拦截器对任何action均有效-->
<default-interceptor-ref name="myStack" />
而记录日志的拦截器,我们可以配置让其生效的相应的action对象。所以如下面代码:表示仅仅用户在登录登出的时候才进行日志过滤记录。
<action name="login" class="sysUserAction" method="login">
<interceptor-ref name="myLogStack"></interceptor-ref>
<result>main/manager_index.jsp</result>
</action>
<action name="logout" class="sysUserAction" method="logout">
<interceptor-ref name="myLogStack"></interceptor-ref>
<result type="redirect">index.jsp</result>
</action>
分享到:
相关推荐
通过过滤器或拦截器,我们可以检查每个请求的会话(Session)中是否存在有效的登录信息,如果没有,就将其重定向到登录页面。 6. **使用说明**: 在使用这个项目之前,你需要了解SpringBoot的基本配置和Thymeleaf...
在IT行业中,Jfinal是一个基于Java的轻量级Web开发框架,它...同时,拦截器的灵活性让我们可以轻松地扩展功能,如增加角色权限控制、日志记录等。在实际开发中,合理利用拦截器可以极大地提高代码的可维护性和安全性。
在J2EE框架如Struts2或Spring MVC中,拦截器是一种AOP(面向切面编程)概念的具体实现,用于拦截并处理特定的请求或方法调用。它们可以用来进行权限检查、日志记录、性能监控、事务管理等通用任务,从而提高代码的可...
SpringMVC 拦截器项目是一个典型的 Web 应用开发示例,它利用 SpringMVC 框架中的拦截器(Interceptor)机制来实现特定的功能,如权限控制、日志记录、性能统计等。SpringMVC 是 Spring 框架的一部分,专为构建基于 ...
拦截器(Interceptor)是Struts2框架中的一个重要组成部分,用于在Action执行前后插入自定义逻辑,例如日志记录、权限验证、事务管理等。在这个“structs2拦截器实例2-权限验证拦截器”的主题中,我们将深入探讨如何...
实际的实现可能还会涉及更多细节,如性能优化、多语言支持、日志记录以及与其他系统的集成等。在设计和实现登录拦截器时,开发者需要综合考虑安全性、效率和用户体验,以确保系统的稳定性和可靠性。
在本案例中,由于项目组认为Struts2的标签性能不佳,所以选择了自定义拦截器来实现防止重复提交。 首先,我们来看如何创建自定义拦截器。在Struts2中,拦截器是基于AOP(面向切面编程)的概念,可以对Action的调用...
### Struts2内置拦截器简介 ...Struts2的内置拦截器提供了丰富的功能,开发者可以根据具体的应用需求选择合适的拦截器来增强应用的功能性。通过对内置拦截器的合理配置和使用,可以使Struts2应用更加健壮和高效。
我们可以通过实现`addInterceptors`方法来自定义拦截器链: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry ...
这些拦截器覆盖了常见的需求,如参数转换、错误处理、会话管理等。 2. **自定义配置**:在项目级的配置文件`struts.xml`中,可以通过以下标签定义拦截器及其顺序: ```xml <!-- 定义单个拦截器 --> 拦截器...
在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合...
总的来说,Struts2拦截器为开发者提供了强大的功能,可以控制Action执行流程、处理异常、实现日志、国际化、模型驱动等多种需求,极大地提高了应用的灵活性和可维护性。正确理解和使用拦截器是掌握Struts2框架的关键...
在MyBatis框架中,拦截器扮演着动态代理的角色,允许我们在执行SQL之前或之后进行额外的操作,比如统计、日志记录或者在本例中的分页处理。下面我们将详细探讨MyBatis拦截器的工作原理以及如何实现分页功能。 首先...
在Struts框架中,拦截器扮演着处理请求、验证用户输入、记录日志等角色,它们按照预定义的顺序对每个请求进行拦截处理。 标题和描述中提到的自定义拦截器主要用于登录验证。当用户尝试访问受保护的资源时,这个拦截...
12. **LoggerInterceptor**:日志拦截器,输出Action的名字以及相关信息,帮助开发者进行日志记录。 13. **Message StoreInterceptor**:消息存储拦截器,用于存储和访问实现了ValidationAware接口的Action类中的...
在本场景中,我们将深入探讨SSH框架中的拦截器机制以及如何实现一个简单的登录功能来连接数据库。 首先,让我们了解SSH框架的组成部分: 1. **Struts2**:作为MVC框架的核心,负责处理HTTP请求,解析用户动作,并...
在提供的`demo-mvc`压缩包中,应该包含了完整的Spring MVC项目,包括拦截器的实现、配置以及相关的权限验证逻辑。通过分析和运行这个示例,你可以更深入地理解Spring MVC拦截器如何用于权限控制。
SpringMVC拦截器是实现登录认证的一种常见方法,它允许开发者在请求被实际处理之前或之后执行特定的逻辑。本文将深入探讨如何利用SpringMVC拦截器来实现这一功能。 首先,了解SpringMVC的核心组件是必要的。...
在Spring MVC框架中,拦截器(Interceptor)是一个...通过以上描述,我们可以了解到Spring MVC中的拦截器机制以及如何自定义和配置拦截器来实现特定的功能。这为开发者提供了灵活的手段来增强应用程序的功能和安全性。