上一篇,我们讲述的spring security的基础使用。但是对于一些复杂权限场景,我们需要更高级一些的功能。
我们接着往下展示它的高级部分。
<security:authentication-manager>的内部高级设置
在上一篇的Spring security设置示例中,我设置了authentication-manager来检查登录用户凭证,并使用标签中定义的纯文本用户。如下所示,您可以在此处为您的应用程序定义多个用户。
<security:user-service>
<security:user name="stiti" password="mindfire" authorities="USER" />
<security:user name="ram" password="pass1234" authorities="ADMIN" />
.
.
and so on...
</security:user-service>
上面的方式,是简单的校验。对于更复杂的,比如要对数据库中的Users表进行身份验证,则可以使用<security:jdbc-user-service>替换<security:user-service> … </ security:user-service>标记。如下。
<security:authentication-manager>
<security:authentication-provider>
<security:jdbc-user-service
data-source-ref="dataSource"
users-by-username-query=
"SELECT username, password FROM users WHERE username=? AND active=1"
authorities-by-username-query=
"SELECT US.username, UR.authority
FROM users US, user_roles UR
WHERE US.user_id = UR.user_id and US.username =?"
/>
</security:authentication-provider>
</security:authentication-manager>
在这里,您执行SQL查询以从数据库中的“users”表中获取用户名和密码。
类似地,用户名的授权权限也从“user_roles”数据库表中获取。
在这里您可以注意到我在“data-source-ref”属性中提到了数据源引用。这是“dataSource”。
因此,您需要在应用程序Context xml文件中定义一个id =“dataSource”的Bean。如下。
<beans ....>
...
...
...
<!-- Datasource Config -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
&