Struts2 自定义拦截器实现用户权限控制

需积分: 3 2 下载量 147 浏览量 更新于2024-08-23 收藏 2.18MB PPT 举报
"这篇文档主要介绍了如何在Struts2框架中自定义拦截器来实现特定的功能,例如控制用户登录后才能访问Action中的方法。" 在Struts2框架中,拦截器(Interceptor)是一个非常重要的概念,它允许开发者在Action执行前后插入自定义逻辑,如权限检查、日志记录、性能监控等。自定义拦截器是扩展Struts2功能的一种方式,使其更加灵活和可定制化。 首先,我们来看一下文档中提出的需求:当用户登录后才能访问Action中的所有方法,否则提示“你没有权限执行该操作”。这是一个典型的权限控制场景,通过自定义拦截器可以很好地解决这个问题。 文档中的步骤如下: 1. 创建页面: - `user.jsp`:用于模拟用户登录,将用户名设置到Session中。 - `quit.jsp`:模拟用户退出,从Session中移除用户信息。 - `message.jsp`:展示拦截器返回的错误消息。 2. 自定义拦截器: - 自定义拦截器需要实现`com.opensymphony.xwork2.interceptor.Interceptor`接口。 - 实现`intercept()`方法,这是拦截器的核心,它会在Action执行之前被调用。在这个方法中,通过`ActionContext`获取Session中的用户信息。如果用户已登录(Session中有`user`),则调用`arg0.invoke()`执行用户请求的方法;否则,将错误消息存入ActionContext,并返回`message`结果,这会将控制权转向`message.jsp`显示错误信息。 3. 定义Action: - 创建一个名为`HelloPremissAction`的类,其中包含一个`message`属性以及对应的getter和setter方法。此外,还定义了两个方法`meth1()`和`meth2()`,分别用于演示Action中的不同方法。 4. 配置拦截器: - 在Struts2的配置文件(如`struts.xml`)中,需要定义拦截器栈,并指定自定义拦截器。同时,需要将这个拦截器应用到需要进行权限控制的Action上。 配置拦截器的示例代码可能如下: ```xml <struts> <package name="default" namespace="/" extends="struts-default"> <interceptors> <interceptor name="loginCheck" class="your.package.name.LoginCheckInterceptor"/> <interceptor-stack name="myStack"> <interceptor-ref name="loginCheck"/> <!-- 其他预定义的拦截器 --> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <action name="*Premiss" class="your.package.name.HelloPremissAction" method="{1}"> <interceptor-ref name="myStack"/> <result name="message">/message.jsp</result> <result name="success">/success.jsp</result> <!-- 示例,成功后跳转的页面 --> </action> </package> </struts> ``` 以上配置将`LoginCheckInterceptor`拦截器添加到了名为`myStack`的拦截器栈中,并将其应用到以`Premiss`结尾的Action上。如果用户未登录访问这些Action,拦截器会阻止执行并转向`message.jsp`显示错误信息。 通过自定义拦截器,开发者可以轻松地在Struts2中实现各种业务逻辑,比如权限验证、事务管理等,提高代码的复用性和可维护性。