Spring Security - 具有默认权限的DB授权?

时间:2011-02-03 21:42:14

标签: authorization spring-security

在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>

如果无法以声明方式完成 - 最好的方法是什么?

先谢谢,

伊恩。

2 个答案:

答案 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 =?”

此查询会重复使用您的帐户表,并为每个用户提供默认权限。