在Spring security 3中 - 我可以声明性地定义一个默认权限,分配给使用jdbc身份验证提供程序进行身份验证的所有经过身份验证的用户吗?目前我的webapp没有角色的概念(也不会 - 你或者是允许访问你帐户的用户,或者你不是),我不想在我的数据库中实现一个权限表,因为它是多余的。目前,通过以下声明,我收到以下错误消息。
消息[表'当局'没有 存在];
<authentication-manager>
<authentication-provider>
<password-encoder hash="plaintext"/>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select account_uid,hashedpassword,true from account where account_uid=?" />
</authentication-provider>
</authentication-manager>
如果无法以声明方式完成 - 最好的方法是什么?
先谢谢,
伊恩。
答案 0 :(得分:2)
<jdbc-user-service>
元素由JdbcUserServiceBeanDefinitionParser
类处理,后者又实例化并配置JdbcUserDetailsManager
bean。此bean包含与托管用户,组和权限相关的SQL。
如果你查看JdbcUserDetailsManager
的源代码,你会发现它的灵活性非常有限。如果您不想要用户权限表,则需要您拥有组权限表。一个或另一个。
如果您想要更简单的东西,看起来您必须编写自己的UserDetailsService
自定义实现。如果你这样做并在上下文中将它声明为普通的Spring bean,你可以使用以下命令将它连接到Spring Security:
<authentication-manager>
<authentication-provider user-service-ref="myUserService">
<password-encoder hash="plaintext"/>
</authentication-provider>
</authentication-manager>
也许复制JdbcUserDetailsManager
的来源并删除权限/组内容是最简单的方法。
答案 1 :(得分:2)
这可以通过简单的方式完成:
authority-by-username-query =“select account_uid,'default'来自账户,其中account_uid =?”
此查询会重复使用您的帐户表,并为每个用户提供默认权限。