我尝试使用Spring Security 3.1.3来保护Web应用程序。
目前我已经设置了一个简单的登录表单,该表单与在security-app-context.xml上硬编码的用户一起工作。现在我正试图让Spring从数据库中验证用户,那就是我遇到了问题 从我到目前为止,我需要在applicationContext.xml上为数据源放置一个bean,然后在security-app-context.xml文件上引用该数据源:
aplicationcontex.xml:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/webproject" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
security-app-context.xml
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource" />
</authentication-provider>
</authentication-manager>
但是当我这样做时,从数据库中验证用户是行不通的。没有例外。
数据库上有两个表,用户(用户名,密码,已启用)和权限(用户名,roleName)。我错过了什么吗?
答案 0 :(得分:1)
我没有足够的声誉来发表评论。无论如何,我不打算给出准确的答案。
我有几个猜测:
您确定角色的数据库列名是roleName吗?不是权威?如果没有明确提供,也许Spring会查找一些默认名称。此行将定义您希望它运行的确切查询:
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="
select username,password, enabled
from users where username=?"
authorities-by-username-query="
select u.username, ur.authority from users u, user_roles ur
where u.user_id = ur.user_id and u.username=?"
/>
</authentication-provider>
</authentication-manager>
您是否在web.xml中添加了安全过滤器?
或许您的表格应该有一些默认名称,例如用户 ??