继上篇《struts2的CRUD中的权限控制初探 》文章后,我们来实现具体的代码实现,在struts2中我们可以自定义拦截器。
       心中谨记基于接口编程的指导,考虑到我们的CRUD操作涉及到load,store,remove,list四个方法,而且要记录操作者的角色,我们提取了接口IRoleAndCRUD,内容如下:
}
       下面我们就实现自己的权限拦截器,继承于实现了拦截器接口Interceptor的抽象类AbstractInterceptor,主要是实现intercept方法,该方法参数是ActionInvocation(action调用者?)可以通过ActionInvocation获取当前action相关信息,和webcontext相关信息,为around advice提供了可能,主要实现可以如下:
    }
       在该类中我们增加了一个静态map,来存储“角色”-“方法”的对应关系,在intercept方法中我们根据该map判断调用方法以及当前用户角色的对应关系,如果不符合我们将转向login页面,当然登陆用户可能具有多种权限,这个map还需要根据需求进一步重构。
       应用自定义拦截器也很简单,在struts.xml中定义即可,大致如下:
(转)实现struts2的CRUD中的权限控制(一)<package name="admin" extends="struts-default" namespace="/admin">
(转)实现struts2的CRUD中的权限控制(一)        
<!--  定义拦截器 -->
(转)实现struts2的CRUD中的权限控制(一)        
<interceptors>
(转)实现struts2的CRUD中的权限控制(一)            
<interceptor name ="auth" class ="com.waimai.utils.AuthorizationInterceptor" />
(转)实现struts2的CRUD中的权限控制(一)        
</interceptors > 
(转)实现struts2的CRUD中的权限控制(一)        
(转)实现struts2的CRUD中的权限控制(一)        
<action name="List" class="com.waimai.web.CaiTypeAction" method="list">
(转)实现struts2的CRUD中的权限控制(一)                 
<!--  调用拦截器 -->
(转)实现struts2的CRUD中的权限控制(一)            
<interceptor-ref name ="auth"/>
(转)实现struts2的CRUD中的权限控制(一)            
<result>listCaiType.jsp</result>
(转)实现struts2的CRUD中的权限控制(一)        
</action>
(转)实现struts2的CRUD中的权限控制(一)        
<action name="Edit" class="com.waimai.web.CaiTypeAction" method="load">
(转)实现struts2的CRUD中的权限控制(一)                 
<!--  调用拦截器 -->
(转)实现struts2的CRUD中的权限控制(一)            
<interceptor-ref name ="auth"/>
(转)实现struts2的CRUD中的权限控制(一)            
<result>editCaiType.jsp</result>
(转)实现struts2的CRUD中的权限控制(一)        
</action>
(转)实现struts2的CRUD中的权限控制(一)        
<action name="Store" class="com.waimai.web.CaiTypeAction" method="store">
(转)实现struts2的CRUD中的权限控制(一)                 
<!--  调用拦截器 -->
(转)实现struts2的CRUD中的权限控制(一)            
<interceptor-ref name ="auth"/>
(转)实现struts2的CRUD中的权限控制(一)               
<result name="input" type="dispatcher">editCaiType.jsp</result>
(转)实现struts2的CRUD中的权限控制(一)            
<result type="redirect">List.action</result>
(转)实现struts2的CRUD中的权限控制(一)        
</action>
(转)实现struts2的CRUD中的权限控制(一)        
<action name="Remove" class="com.waimai.web.CaiTypeAction" method="remove">
(转)实现struts2的CRUD中的权限控制(一)                 
<!--  调用拦截器 -->
(转)实现struts2的CRUD中的权限控制(一)            
<interceptor-ref name ="auth"/>
(转)实现struts2的CRUD中的权限控制(一)            
<result type="redirect">List.action</result>
(转)实现struts2的CRUD中的权限控制(一)        
</action>
(转)实现struts2的CRUD中的权限控制(一)    
</package>
          这样在调用这些定义了拦截器的action时都会检查用户权限。在我们的系统中,我们的crud相关的action的继承关系如下:具体action继承于AbstractCRUDAction实现IRoleAndCRUD接口,但是所有的需要权限控制的action方法都要在配制文件中加入
这么一行,真是很不爽呀,不知道能不能给接口设置拦截器,由于自己对struts2还不是很了解,查了一些资料没有好的解决方案,如果谁有好的解决方案请告知我。感觉要做到伸缩性强,维护性强的权限系统还是需要使用acegi集成进系统....

相关文章:

  • 2021-08-04
  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2021-06-04
猜你喜欢
  • 2021-10-13
  • 2022-01-18
  • 2021-07-16
  • 2021-06-02
  • 2022-12-23
  • 2022-12-23
  • 2021-12-12
相关资源
相似解决方案