有时候我需要在几个包下都需要进行同一个权限控制。如在购物网站中,我们需要进入个人中心、下订单、评价
商品等等都需要进行登录权限控制,但是这几个模块并不是位于同一个package下。Struts提供的拦截器,我们可以实
现action下拦截,我们虽然可以在每一个package都配置这个拦截器,但是是相当的麻烦。这个时候我们可以利用拦
截器实现拦击package。将需要进行权限控制package放入拦截器中就可以实现了。
首先我们需要在struts.xml下进行拦截器的配置。
<package name="main" extends="struts-default">
<interceptors>
<interceptor name="authorizationInterceptor" class="syxh.common.aop.SystemInterceptor"></interceptor>
<interceptor-stack name="jwzhptStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="authorizationInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="jwzhptStack" />
<global-results>
<result name="loginfailure" type="redirectAction">
<param name="namespace">/index</param>
<param name="actionName">index</param>
</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="input" exception="*">/login.jsp</exception-mapping>
</global-exception-mappings>
</package>
上面配置的main ,所以的package都要继承main,即:extends=”main”,否则实现不了。
在struts.xml中,使用了拦截器栈,里面包含两个拦截器,一个是默认的defaultStack,一个是进行权限控制的
authorizationInterceptor。
拦截器实现类:SystemInterceptor.java
public class SystemInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = -1819593755738908387L;
private static final String WITHOUT = "/index, /author, /common, /indexzp"; //不需要进行权限控制的namespace
public void destroy(){
}
public void init(){
}
public String intercept(ActionInvocation invocation) throws Exception{
String namespace = invocation.getProxy().getNamespace(); //获取namespace
if (WITHOUT.indexOf(namespace) >= 0){
return invocation.invoke();
}
Map<?, ?> session = invocation.getInvocationContext().getSession();
UserBean user = (UserBean) session.get("currentUser");
if (user == null){ //没有登录
return "loginfailure";
}
return invocation.invoke(); //已登录
}
}
上面的拦截器实现类,指定了几个namespace是不需要进行权限控制的,除此之外其他的namespace都要进行
权限控制。
其他package只需要继承main既可实现权限控制。
<package name="user" namespace="/user" extends="main">
<action name="userCenter_*" class="syxh.grzx.action.UserCenterAction" method="{1}">
<result name="updatePasswordUI">/jsp/grzx/updatePassword.jsp</result>
<result name="updateError">/jsp/grzx/updatePassword.jsp</result>
<result name="updateSuccess" type="redirect">/zp/myWorksHome.action</result>
<result name="updatePhoteUI">/jsp/grzx/updatePhoto.jsp</result>
<result name="updateInfoUI">/jsp/grzx/updateInfo.jsp</result>
</action>
</package>
注:由于这个拦截器主要是根据namespace来进行控制的,所以在配置package,要添加namespace。
分享到:
相关推荐
Struts2拦截器实现权限控制demo,我感觉对初学者还是有一定帮助的
NULL 博文链接:https://luckyhua.iteye.com/blog/1863458
struts 拦截器实现权限拦截,例子简单易懂,有详细的注释。
综合使用servlet filter与struts2 interceptor对权限进行验证。
使用了struts2的拦截器,主要在struts.xml文件里面配置,适合新手学习,环境是idea,前端是jsp使用struts2的控件
使用Struts2拦截器制作的一些关于权限控制的代码,给同行朋友们参考、学习下。
利用Struts2的核心技术----拦截器实现权限控制。详细代码详解
里面是自己实现struts拦截器的一个原理,基于jdk的动态代理
使用struts拦截器+注解实现日志审计功能 详见博客: http://blog.csdn.net/lk_blog/article/details/10248395
struts2拦截器控制权限,这个例子不错,值得学习。
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
一个关于struts拦截器的简单例子,适合初学者!
本篇文章主要介绍了struts2如何使用拦截器进行用户权限控制实例,非常具有实用价值,需要的朋友可以参考下
struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。
Struts拦截器的案例,没有使用Hibernate,使用的是JDBC,该代码的核心实现是拦截器,至于数据库可根据个人需求进行修改。
1 实现权限控制拦截器 本示例应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但...
struts2拦截器实现权限控制。 内附代码及说明。 就在这里和大家分享下,希望能帮到哪位朋友。
Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序
其中,init和destroy方法会在程序开始和结束时各执行一遍,不管使用了该拦截器与否,只要在struts.xml中声明了该Struts2拦截器就会被执行。 intercept方法就是拦截的主体了,每次拦截器生效时都会执行其中的逻辑。
struts1.2拦截器使用插件