我要分享的是我为华夏银行保证金系统做的一个权限管理模块,基于struts2拦截器来实现可配置的权限模型。
看下struts配置文件先:
<package name="accesslog" extends="base" abstract="true"> <interceptors> <interceptor name="accesslog" class="com.ylsoft.power.web.intercept.AccessLogInterceptor"> </interceptor> <interceptor-stack name="accesstrace"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="accesslog" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="accesstrace" /> </package> <package name="needsession" extends="accesslog" abstract="true"> <interceptors> <interceptor name="validsession" class="com.ylsoft.power.web.intercept.ValidSessionInterceptor"> </interceptor> <interceptor-stack name="filtersession"> <interceptor-ref name="mydefault"></interceptor-ref> <interceptor-ref name="accesslog"></interceptor-ref> <interceptor-ref name="validsession"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="filtersession"></default-interceptor-ref> </package> <package name="authrole" extends="needsession" abstract="true"> <interceptors> <interceptor name="authenticate" class="com.ylsoft.power.web.intercept.AuthenticateInterceptor"> </interceptor> <interceptor-stack name="auth"> <interceptor-ref name="mydefault"></interceptor-ref> <interceptor-ref name="accesslog"></interceptor-ref> <interceptor-ref name="filtersession"></interceptor-ref> <interceptor-ref name="authenticate"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="auth"></default-interceptor-ref> </package>
我把对struts提供的服务的访问权限分为以下几种:
1.不做任何限制
2.只做访问日志
3.所有登录的用户都能访问
4.通过角色认证的用户才能访问
通过配置文件可以看出它们有序的组合在一起,并且都是抽象的,对它们的定义很简单,它们是独立的内容不与任何业务相关,因为它们不知道接下来要配置到哪些业务上。
这样的好处是这些配置可以重用,方便管理。
下面是针对具体业务的配置:
<package name="backlog" namespace="/" extends="authrole"> <action name="backlog" class="com.ylsoft.backlog.action.BacklogAction"> <result name="failList"> /project/backlog/failList.jsp </result> <result name="accountUpdate"> /project/backlog/accountUpdate.jsp </result> <result name="queryList"> /project/backlog/queryList.jsp </result> </action> </package>