Struts2拦截器实现用户登录权限验证机制
2星 需积分: 16 103 浏览量
更新于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,提高了代码的可复用性和可维护性。
2012-07-12 上传
448 浏览量
点击了解资源详情
点击了解资源详情
2019-04-19 上传
2019-08-03 上传
2020-11-15 上传
2012-05-29 上传
2020-08-30 上传
WuHuLuanQu
- 粉丝: 0
- 资源: 1
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全