应用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。
所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》
有时辰我须要在几个包下都须要进行同一个权限把握。如在购物网站中,我们须要进入小我中间、下订单、评价商品等等都须要进行登录权限把握,然则这几个模块并不是位于同一个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。
所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》