使用拦截器进行粗粒度的权限管理
1. 首先要在struts的配置文件中进行拦截器的配置
<package name="sys" extends="struts-default" namespace="/">
<interceptors>
<!-- 声明自己的拦截器,起名叫check,对应的class属性为自己编写的拦截器路径 -->
<interceptor name="check" class="com.scm.actions.sys.AuthorInterceptor" />
<!-- 定义拦截器栈,这里需要注意:在定制自己拦截器的同时,必须要把struts的默认栈加如里面,如果不加入,相当于把默认的覆盖了,会出现异常! -->
<interceptor-stack name="myCheck">
<interceptor-ref name="check" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="myCheck" />
<!-- 定义全局结果,用于在拦截器中返回登录页面或者错误提示页面 -->
<global-results>
<result name="login" type="redirect">/round.html</result>
<result name="error">/scm_templates/Samples/index.html</result>
</global-results>
</package>
2. 编写拦截器类
package com.scm.actions.sys;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.scm.domain.SysYonghu;
/**
* 拦截器需要继承AbstractInterceptor,或者是实现Interceptor接口(AbstractInterceptor也是实现的Interceptor)
*/
@SuppressWarnings("serial")
public class AuthorInterceptor extends AbstractInterceptor {
/*不清楚为什么,在拦截器中注入业务层或者数据访问层的对象始终为null,
但是注入action对象却可以,所以这里我注入action对象,然后在action中
转去调用业务层的方法..*/
private YongHuAction yonghuAction;
//getter and setter...
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("=======检查action=======");
// 获得拦截到的action名称
String actionName =invocation.getInvocationContext().getName();
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
//如果拦截到的action是请求登录的action,则放行.
if (actionName.equals("logins")) {
return invocation.invoke();
} else {
//session中取得当前用户.
SysYonghu yonghu = (SysYonghu) session.get("current_user");
//如果当前用户为空,转到登录页面.
if(yonghu==null){
session.put("tip", "请登录...");
return Action.LOGIN;
}
//调用action中的方法, 判断有无访问此动作的权限
boolean result=yonghuAction.isHave(actionName, yonghu);
if(result){
return invocation.invoke();
}else{
session.put("quanxian_tip", "您没有该资源的权限!");
return Action.ERROR;
}
}
}
}
3. 在使用的时候,如果有多个struts配置文件,只需要继承”sys”即可.如果其他配置文件中又定义了拦截器.那么这个拦截器将失效.
不足之处:拦截器只能拦截访问的action,如果直接访问jsp或其他视图,拦截器无法拦截. 所以应该配合filter使用;其实spring有自己的安全框架.可以把权限分的很细.希望有机会能用到.
分享到:
相关推荐
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
综合使用servlet filter与struts2 interceptor对权限进行验证。
解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中
struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。
struts2常用拦截器,struts2经常用到的拦截器,熟悉熟悉
Struts2拦截器实现权限控制demo,我感觉对初学者还是有一定帮助的
该例子为struts2注解与拦截器demo,利用myEclipse8.5开发,导入刚才后,自动加载所需struts2的jar包,可以直接运行,是初学struts2注解、拦截器很好的例子,保证10分钟学会2种技术,愿意分享给大家。
使用Struts2实现用户权限拦截、重点是掌握拦截器的使用和配置方法,通过案例的学习,就能掌握struts中拦截器的使用方法,让我们能快速上手
Struts2的拦截器的使用详解实例 博文链接:https://zmx.iteye.com/blog/457434
struts2 Interceptor拦截器 http://whitewolf.0fees.net
Struts2拦截器.ppt Struts2拦截器.ppt Struts2拦截器.ppt
关于struts2 拦截器的详细的解释及其在开发中对struts2的拦截器的应用和拦截器在框架中的作用.
Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序
详细说明了struts2中拦截器的使用。并且通过一个小例子讲解了拦截器的具体使用
struts2,Interceptor struts2拦截器实例,两套实例,一套是针对单个的action配置的,另一套实例是针对全局的action配置的拦截器interceptor
基于struts2的拦截器测试,实现了页面的跳转,中间过程的拦截
struts2拦截器的使用说明文档,配置说明文档。可以看一下
Struts2在com.opensymphony.xwork2.interceptor.annotations包中定义了3个拦截器注解类型。
struts2拦截器应用小例子,与大家共分享
NULL 博文链接:https://cmexico.iteye.com/blog/621208