spring acegi 权限设计
一般在一个应用系统中都会有权限的设计,最基本的权限设计会关系到五张表,用户表,角色表,权限表用户和角色的中间表,角色和权限的中间表,这样五张表,在负责一些的权限设计还会进行分组,将资源放入表中,并建立权限和资源的中间关系表,
http://p.blog.****.net/images/p_blog_****_net/cailiang517502214/EntryImages/20090923/59833db1tc7a7e10c3d18&690副本.jpg
spring
acegi 是spring框架中最为优秀的框架之一,今天讲的是关于spring acegi的权限配置,其中会采用jcaptcha的验证码服务 整个项目
采用struts2.16(注解) hibernate3.12(注解) spring2.5(注解) spring acegi
2.05的版本.
整个项目的结构如图:
要在项目中使用spring
acegi需要在web.xml中引入 acegi
<!-- SpringSecurity filter-->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(struts2 和hibernate的引入就不说了,关于验证码
在后面下载的例子中会有详细的配置)
在引入acegi后,最主要的就是关于applicationContext-serurity.xml文件的配置了,
<!-- http安全配置 -->
<http auto-config='true'
access-decision-manager-ref="accessDecisionManager">
<intercept-url pattern="/user/*"
access="A_Normal,A_Member,A_Administrator" />
<form-login login-page="/login.jsp"
default-target-url="/user/users"
authentication-failure-url="/login.jsp?error=1" />
</http>
intercept-url
是表示受保护的资源,access是指那些角色具有访问权限,由于acegi的默认权限是一ROLE_开头的,所以通过access-decision-manager-ref="accessDecisionManager"
这个bean标签可以修改成你所需要的前缀,并不局限于acegi,form-login
配置系统的登录页面,default-target-url是指登录成功后返回的页面,authentication-failure-url是指认证失败后的页面,
acegi的认证模式有好几种,比如数据库的认证模式(常用模式),cas认证等等,
<authentication-provider
user-service-ref="myUserDetailServices >
</authentication-provider
>
这种模式 是基于数据库的认证模式 myUserDetailServices 是自己定义的一个spring
bean
<beans:bean id="myUserDetailServices"
class="com.happy.services.LoginValidate"></beans:bean>
这是我们自己写的一个类,但是这个类有些特殊,这个类必须实现
UserDetailsService接口实现loadUserByUsername方法并 返回UserDetails
当然在测试的时候
我们可以把用户名和这些直接写在配置文件中
<authentication-provider >
<!-- user-service-ref="myUserDetailServices" -->
<user-service>
<user name="normal" password="normal"
authorities="A_Normal" />
<user name="user" password="user"
authorities="A_Normal,A_Member" />
<user name="admin" password="admin"
authorities="A_Normal,A_Member,A_Administrator" />
</user-service>
</authentication-provider>
去掉基于数据库的认证模式.
这样就完成了acegi的配置,当具有权限的人才有权访问指定的页面,acegi还有一系列的标签,用来在页面上控制内容的展示,
<%@ taglib
prefix="security"
uri="http://www.springframework.org/security/tags"%>(导入标签)
比如说
<security:authorize
ifAnyGranted="A_Administrator">删除</security:authorize>
当用户具有A_Administrator的权限时 才会显示 删除菜单,这就是一个简单的基于acegi权限的配置
资源的下载地址:
http://download.****.net/source/1620226
带验证码(基于配置文件的验证)
http://download.****.net/source/1606935 不带验证码 (基于数据库的验证)