} } }

    应用Struts 阻碍namespace进行权限把握

    添加时间:2013-6-17 点击量:

            有时辰我须要在几个包下都须要进行同一个权限把握。如在购物网站中,我们须要进入小我中间、下订单、评价商品等等都须要进行登录权限把握,然则这几个模块并不是位于同一个package下。Struts供给的阻碍器,我们可以实现action下阻碍,我们固然可以在每一个package都设备这个阻碍器,然则是相当的麻烦。这个时辰我们可以哄骗阻碍器实现拦击package。将须要进行权限把握package放入阻碍器中就可以实现了。


            起首我们须要在struts.xml下进行阻碍器的设备。



     1 <package name=main extends=struts-default>
    
    2 <interceptors>
    3 <interceptor name=authorizationInterceptor class=syxh.common.aop.SystemInterceptor></interceptor>
    4 <interceptor-stack name=jwzhptStack>
    5 <interceptor-ref name=defaultStack></interceptor-ref>
    6 <interceptor-ref name=authorizationInterceptor></interceptor-ref>
    7 </interceptor-stack>
    8 </interceptors>
    9
    10 <default-interceptor-ref name=jwzhptStack />
    11
    12 <global-results>
    13 <result name=loginfailure type=redirectAction>
    14 <param name=namespace>/index</param>
    15 <param name=actionName>index</param>
    16 </result>
    17 </global-results>
    18
    19 <global-exception-mappings>
    20 <exception-mapping result=input exception=>/login.jsp</exception-mapping>
    21 </global-exception-mappings>
    22 </package>


            上方设备的main ,所以的package都要持续main,即:extends=”main”,不然实现不了。


           在struts.xml中,应用了阻碍器栈,里面包含两个阻碍器,一个是默认的defaultStack,一个是进行权限把握的authorizationInterceptor。


            阻碍器实现类:SystemInterceptor.java



     1 public class SystemInterceptor extends AbstractInterceptor{
    
    2
    3 private static final long serialVersionUID = -1819593755738908387L;
    4 private static final String WITHOUT = /index, /author, /common, /indexzp; //不须要进行权限把握的namespace
    5
    6 public void destroy(){
    7 }
    8
    9 public void init(){
    10 }
    11
    12 public String intercept(ActionInvocation invocation) throws Exception{
    13 String namespace = invocation.getProxy().getNamespace(); //获取namespace
    14 if (WITHOUT.indexOf(namespace) >= 0){
    15 return invocation.invoke();
    16 }
    17
    18 Map<?, ?> session = invocation.getInvocationContext().getSession();
    19 UserBean user = (UserBean) session.get(currentUser);
    20 if (user == null){ //没有登录
    21 return loginfailure;
    22 }
    23 return invocation.invoke(); //已登录
    24 }
    25 }


    
    

            上方的阻碍器实现类,指定了几个namespace是不须要进行权限把握的,除此之外其他的namespace都要进行


    权限把握。


             其他package只须要持续main既可实现权限把握。



    1 <package name=user namespace=/user extends=main>
    
    2 <action name=userCenter_ class=syxh.grzx.action.UserCenterAction method={1}>
    3 <result name=PasswordUI>/jsp/grzx/Password.jsp</result>
    4 <result name=Error>/jsp/grzx/Password.jsp</result>
    5 <result name=Success type=redirect>/zp/myWorksHome.action</result>
    6 <result name=PhoteUI>/jsp/grzx/Photo.jsp</result>
    7 <result name=InfoUI>/jsp/grzx/Info.jsp</result>
    8 </action>
    9 </package>


            注:因为这个阻碍器主如果按照namespace来进行把握的,所以在设备package,要添加namespace。

    所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》
    分享到: