一个Spring Security的数据库认证实例,要注意以下几点:
(1)请自行加入Spring必须的包,Spring security的包和MySQL的驱动包,当然你也可以换成其他的数据库,但是你要相应的修改spring-common.xml中的dataSource部分
(2)users表必须包含username,password,enabled字段,这三个字段是绝对不能少的,也不能修改类型.另外enabled一定要为1才能登录,当然可以叫别的字段但是必须as为这几个名字。
(4)角色名字必须满足ROLE_XXX的格式(例如:ROLE_ADMIN,ROLE_USER,ROLE_MAMAGER),当然这是默认情况,也可以通过修改配置文件自己设定一个自定义的开头。
(5)注意自定义登陆页面的action名字,以及j_username,j_password。
以上第四条新手尤其注意,困扰了我一天时间。以下附上配置片段。
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select username,password,isvalid as enabled from user where username=?"
authorities-by-username-query="select u.username,r.name as authority from user u join role r on u.roleid=r.id where u.username=?"/>
</authentication-provider>
<beans:bean id="filterSecurityInterceptor"
class="org.springframework.security.intercept.web.FilterSecurityInterceptor" autowire="byType">
<custom-filter before="FILTER_SECURITY_INTERCEPTOR"/>
<beans:property name="objectDefinitionSource" ref="filterInvocationDefinitionSource"/>
</beans:bean>
<beans:bean id="filterInvocationDefinitionSource"
class="cn.javalib.unilines.security.JdbcFilterInvocationDefinitionSourceFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="resourceQuery" value="select re.url as res_string,r.name from role r join role_resource rr on r.id=rr.role_id join resource re on re.id=rr.resources_id"/>
</beans:bean>