Struts2拦截器实现用户登录权限验证机制
2星 需积分: 16 142 浏览量
更新于2024-09-12
收藏 2KB TXT 举报
在Struts2框架中,拦截器(Interceptor)是核心组件之一,用于在Action执行前后进行额外的业务逻辑处理。在本示例中,我们探讨如何使用Struts2拦截器实现用户登录权限的验证。
首先,定义一个名为`AuthInterceptor`的拦截器类,该类继承自`AbstractInterceptor`。这个拦截器的主要职责是检查用户是否已经登录,即验证用户的登录状态。在`intercept`方法中,我们通过`ActionInvocation`对象获取到当前请求的上下文,然后从session中获取存储的用户信息。
```java
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class AuthInterceptor extends AbstractInterceptor {
@Override
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception {
Map map = invocation.getInvocationContext().getSession(); // 获取session
if (map.get("user") == null) { // 检查session中是否有用户信息,如果没有,表示用户未登录
return Action.LOGIN; // 返回登录页面
} else {
return invocation.invoke(); // 用户已登录,继续执行Action
}
}
}
```
在这个拦截器中,我们使用`@SuppressWarnings("unchecked")`注解来抑制可能的类型转换警告,因为`Map`的get方法返回的是`Object`类型,我们需要将其转换为我们期望的类型。
接下来,我们看一个简单的登录Action,名为`LoginAction`。在`execute`方法中,当用户名和密码匹配时,将有效的用户信息存入session:
```java
public String execute() throws Exception {
if ("hello".equals(this.getUsername().trim()) && "world".equals(this.getPassword().trim())) {
Map map = ActionContext.getContext().getSession();
map.put("user", "valid"); // 将用户标识存入session,key为"user"
return "success";
} else {
this.addFieldError("username", "username or password error");
return "failer";
}
}
```
在这个Action中,如果用户名为"hello"且密码为"world",则将"valid"存入session,键为"user"。这意味着用户已经成功登录。如果用户名或密码错误,添加字段错误并返回"failer"视图,通常会显示错误消息。
为了使`AuthInterceptor`生效,需要在Struts配置文件(如struts.xml)中定义拦截器栈,并将`AuthInterceptor`加入其中。同时,需要指定哪些Action需要应用此拦截器,例如:
```xml
<struts>
<!-- ... -->
<interceptors>
<interceptor name="authInterceptor" class="com.example.AuthInterceptor"/>
<interceptor-stack name="authStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="authInterceptor"/>
</interceptor-stack>
</interceptors>
<package name="default" namespace="/" extends="struts-default">
<!-- ... -->
<action name="login" class="com.example.LoginAction">
<result name="success">/success.jsp</result>
<result name="failer">/error.jsp</result>
</action>
<!-- ... -->
<action name="" class="com.exampleProtected.*Action">
<interceptor-ref name="authStack"/>
<result name="success">/protected/success.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
<!-- ... -->
</struts>
```
在上述配置中,`authStack`是包含默认拦截器栈和`authInterceptor`的拦截器栈。`login` Action不使用`authInterceptor`,因为它是用来处理登录请求的。而其他以`com.exampleProtected.*Action`开头的Action将使用`authStack`,因此在用户未登录的情况下会被重定向到登录页面。
通过创建和配置Struts2拦截器,我们可以实现用户登录权限的验证,确保只有已登录的用户才能访问特定的Action,从而保护了应用程序的安全性。拦截器机制使得这种验证逻辑可以独立于Action,提高了代码的可复用性和可维护性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
448 浏览量
2019-04-19 上传
2019-08-03 上传
2020-11-15 上传
2012-07-12 上传
WuHuLuanQu
- 粉丝: 0
- 资源: 1
最新资源
- Angular实现MarcHayek简历展示应用教程
- Crossbow Spot最新更新 - 获取Chrome扩展新闻
- 量子管道网络优化与Python实现
- Debian系统中APT缓存维护工具的使用方法与实践
- Python模块AccessControl的Windows64位安装文件介绍
- 掌握最新*** Fisher资讯,使用Google Chrome扩展
- Ember应用程序开发流程与环境配置指南
- EZPCOpenSDK_v5.1.2_build***版本更新详情
- Postcode-Finder:利用JavaScript和Google Geocode API实现
- AWS商业交易监控器:航线行为分析与营销策略制定
- AccessControl-4.0b6压缩包详细使用教程
- Python编程实践与技巧汇总
- 使用Sikuli和Python打造颜色求解器项目
- .Net基础视频教程:掌握GDI绘图技术
- 深入理解数据结构与JavaScript实践项目
- 双子座在线裁判系统:提高编程竞赛效率