在这里,我们通过一个简单的例子来演示如何用Interceptor来验证权限。
我们假设你的程序中已经写好了每个用户的权限,如A用户的权限是InsertUser.action,,,,或者更多,一个权限字符串。
在xwork.xml配置Interceptor,配置InsertUser.action.
OK !
下面是验证步骤:
1.用户访问InsertUser.action,触发Interceptor
2.在Interceptor中我们需要获取HttpSession来取得当前用户,查询当前用户具有的权限String.将它转换为String[],
3.获取当前用户访问的url :通过HttpServletRequest来获取url ,再处理以后的url为xxx.action.
4.判断该url是否与当前用户权限String[]中某一个String 一致。
5.一致 就继续执行该Action,否则就return "error";
好 ,下面是Interceptor的代码
public class SecurityInterceptor implements Interceptor {
private static final long serialVersionUID = 1L;
private Logger log = Logger.getLogger(this.getClass());
public void destroy() {
log.info(">>>>>>>>>>>>>>>>>>>>>>>结束拦截器!!!!<<<<<<<<<<<<<<<<<<<<<");
}
public void init() {
log.info(">>>>>>>>>>>>>>>>>>>>>>>开始初始化拦截器!!!!<<<<<<<<<<<<<<<<<<<<<");
}
public String intercept(ActionInvocation invocation) throws Exception {
String strFullPath = ServletActionContext.getServletContext()
.getRealPath("/");
strFullPath = strFullPath + "WEB-INF//applicationContext.xml";
ApplicationContext ac = new FileSystemXmlApplicationContext(strFullPath);
SecurityDAOImpl security = (SecurityDAOImpl) ac.getBean("securityDAO");
// Bean容器中无法配置Interceptor,所以SecurityDAOImpl中无法获得SessionFactory 必须读取配置文件
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
UserInfo user = (UserInfo) session.getAttribute("UserLoginInfo");// 获取session中存放的用户信息
boolean flag = false;
if (user != null) {
log
.info(">>>>>>>>>>>>>>>>>>>>>>>当前用户" + user.getUserName()
+ " 进入" + invocation.getAction()
+ ",开始操作!!!!!<<<<<<<<<<<<<<<<<<<<");
log
.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>判断当前用户权限开始<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!!!!!");
String url = "";
url = Constant.ChangeUrl.getUrl(request.getRequestURL().toString());
List list = null;
if (url != null) {
list = security.getSecurityByUser(user);// 获取用户权限 如1,2,3,4
if (list != null) {
if (list.size() > 0 && list.get(0) != null) {
String[] str = ((String) list.get(0)).split(";");// 获得用户权限数组为数字字符串
String[] strTemp = null;
for (int i = 0; i < str.length; i++) {
if (str[i] != null && str[i] != "") {
strTemp = Constant.SecurityList
.getNameBySecurity(
Integer.parseInt(str[i]))
.split(",");// 这里是分割每个权限字符串
if (strTemp != null) {
for (int j = 0; j < strTemp.length; j++) {
//就只有这1句是来验证url是否相等
if (url.equalsIgnoreCase(strTemp[j])) {
flag = true;
break;
}
}
}
}
}
}
}
}
} else {
log.info("您尚未登录或者登录失效!,请重新登录");
request.setAttribute("noLogin", "noLogin");
}
if (flag) {
log
.info(">>>>>>>>>>>>>>>>>>验证成功,你有访问权限!!!!开始操作!!!<<<<<<<<<<<<<<<<<<<<<");
return invocation.invoke();
} else {
log.info(">>>>>>>>>>>>>>>>>>您没有访问权限!!<<<<<<<<<<<<<<<<<<<<<");
return "error";
}
}
}
中间部分都是查询数据库中用户权限,再进行分割。只有最后2句是最重要的
return invocation.invoke(); 这里指继续执行action
return "error"; 直接跳转到错误页面。
OK! 现在我们来看看 xwork.xml的配置。
<xwork>
<include file="webwork-default.xml"></include>
<package name="default" extends="webwork-default">
<interceptors>
<interceptor name="params"
class="com.opensymphony.xwork.interceptor.ParametersInterceptor" />
<interceptor name="SecurityInterceptor"
class="com.xxx.xxx.SecurityInterceptor" />
<interceptor name="logger"
class="com.opensymphony.xwork.interceptor.LoggingInterceptor" />
<interceptor-stack name="testStack">
<interceptor-ref name="SecurityInterceptor" />
<interceptor-ref name="params" />
<interceptor-ref name="logger" />
</interceptor-stack>
</interceptors>
<global-results>
<result name="login" type="dispatcher">
<param name="location">/login.jsp</param>
</result>
<result name="error" type="dispatcher">
<param name="location">/error.jsp</param>
</result>
</global-results>
<action name="InsertUser.action" class="xxx"
method="xxx">
<result name="success">/user/addSecurityGroup.jsp</result>
<interceptor-ref name="testStack"></interceptor-ref>
</action>
这里也用了webwork自带的Interceptor ,其中params是必须的,由于采用了Interceptor,可能你提交给Action的参数也拦截掉了,无法获得到参数,而params可以将参数带给Action.
logger是做日志的,在Action进入之前和结束以后均会写一条日志,如:before xxx action , after xxx action.
分享到:
相关推荐
WebWork权限拦截器是WebWork框架中的一个重要组件,主要用于实现基于拦截器(interceptor)的权限控制。在Web开发中,权限拦截器扮演着至关重要的角色,它可以在用户请求到达控制器之前进行预处理,判断用户是否有权...
在WebWork中,拦截器是处理请求的关键组件,它们在动作执行前后执行特定的任务,如日志记录、权限检查、数据转换等。拦截器通过在ActionInvocation链中插入逻辑,使得开发者可以灵活地扩展应用程序的行为,而无需...
可以使用`<interceptors>`标签定义拦截器栈,然后使用`<interceptor>`标签声明具体的拦截器,最后在`<action>`标签中通过`<interceptor-ref>`指定拦截器的使用。 例如: ```xml ...
- **代码复用**:通过将常用的功能(如日志记录、权限检查等)封装在拦截器中,可以显著提高代码的复用性。 - **易于维护**:将横切关注点(Cross-cutting Concerns)从业务逻辑中分离出来,使得业务逻辑更加清晰,...
4. **Interceptors(拦截器)**:WebWork引入了拦截器的概念,它们在Action执行前后执行,可以实现通用的功能,如权限检查、日志记录等。在源码中,你会看到这些拦截器的实现。 5. **Value Stack(值栈)**:...
4. **拦截器**:WebWork2通过拦截器链来增强Action的执行过程,例如,权限检查、日志记录、事务管理等。在webwork.xml中,你可以创建自定义的拦截器并将其添加到默认的拦截器栈中。 5. **结果类型配置**:WebWork2...
3. Interceptors(拦截器):拦截器是WebWork2.0的一个强大功能,允许在Action调用前后插入自定义逻辑,如权限验证、日志记录等。 二、WebWork2.0主要特性 1. 智能表单绑定:WebWork2.0支持自动将HTTP请求参数绑定...
**拦截器**:拦截器在Action执行前后执行,可以用于实现诸如权限检查、日志记录、数据验证等功能。 #### 4. **结果类型**:WebWork支持多种结果类型,如dispatcher、redirect、stream等,用于控制请求的处理流程和...
3. **拦截器(Interceptors)**:WebWork 使用拦截器来执行一些预处理或后处理任务,如权限验证、日志记录等。拦截器可以在Action执行前后插入自定义逻辑,增强了系统功能的灵活性。 4. **异常处理**:WebWork 提供...
4. **拦截器(Interceptors)**:拦截器允许在Action执行前后插入额外的功能,如日志记录、事务管理、权限检查等。学习如何编写和配置拦截器能提高代码的复用性和可维护性。 5. **结果(Results)**:Results定义了...
拦截器可以在Action执行前后进行预处理或后处理,比如权限检查、日志记录、事务管理等。这种机制使得开发者可以轻松地在不修改Action代码的情况下,添加新的功能或修改现有行为,大大提高了代码的复用性和可维护性。...
此外,WebWork的拦截器(Interceptor)机制非常强大,可以实现事务管理、权限检查、日志记录等功能。在webworkPratice中,你可能会遇到一些预定义的拦截器或者自定义的拦截器,通过分析它们的工作原理,可以加深对...
拦截器可以用于日志记录、权限检查、事务管理等多种用途,大大增强了框架的灵活性。 4. **Ognl(Object-Graph Navigation Language)** WebWork使用Ognl作为表达式语言,用于在Action和视图之间绑定数据,以及在...
WebWork的核心概念包括Action、Interceptors(拦截器)、ValueStack(值栈)和OGNL(Object-Graph Navigation Language)。Action是处理用户请求的业务逻辑,而Interceptor则允许在Action执行前后进行额外的操作,如...
3. **Interceptors(拦截器)**:WebWork2引入了拦截器的概念,它们在Action执行前后执行,可以用于日志记录、事务管理、权限验证等。拦截器的使用使得代码更易于组织和复用。 4. **动态方法调用(Dynamic Method ...
拦截器可以用于权限检查、日志记录、事务管理等多种场景。 5. **ValueStack**:ValueStack是WebWork的一个重要特性,它是一个存储Action上下文数据的数据结构。ValueStack允许开发者将数据放入栈中,然后在JSP或...
2. Interceptors(拦截器):在Action执行前后运行的组件,用于实现通用的业务逻辑,如权限检查、日志记录等。拦截器链可以灵活配置,提供了强大的扩展能力。 3. XWork:WebWork的底层框架,负责对象管理、依赖注入...
1. 动作拦截器(Interceptors):拦截器可以对动作执行前后的流程进行增强,如权限检查、日志记录等。通过配置,可以灵活地组合和应用拦截器。 2. 数据验证(Validation):WebWork2提供了强大的数据验证机制,可以...
3. **拦截器(Interceptor)**:类似于AOP(面向切面编程),WebWork允许开发者定义拦截器来处理共性任务,如日志记录、事务管理、权限检查等,这些任务可以在动作执行前后自动进行。 4. **强大的表单处理**:...