如何在 Spring Security 应用程序中列出 *all* 用户和 *all* 权限

Posted

技术标签:

【中文标题】如何在 Spring Security 应用程序中列出 *all* 用户和 *all* 权限【英文标题】:How to list *all* users and *all* authorities in a Spring Security application 【发布时间】:2012-04-25 21:25:54 【问题描述】:

Q1) Spring Security 中是否有一种方法(即类方法)允许您列出所有 Sprint Security 用户和角色表中的用户和角色? (我不只查找登录用户;也不只查找给定用户的权限。我正在查找所有用户和所有权限。)

Q1b) 如果有办法,运行此查询的用户是否需要特殊权限?

(我可以通过编写自己的 SQL 语句来查询用户和权限表来解决这个问题,但这似乎是不必要的工作,容易出错,并且会破坏 Spring Security API。)

如果有帮助,我的应用程序上下文设置是相当标准的:

<authentication-manager alias="myAuthenticationManager">
    <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="select username, password, enabled from users where users.username=?"
            authorities-by-username-query="select users.username,authority from users,authorities where users.username=authorities.username and users.username=?" />
    </authentication-provider>
</authentication-manager>

<beans:bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <beans:property name="driverClassName">
        <beans:value>com.mysql.jdbc.Driver</beans:value>
    </beans:property>
    <beans:property name="url">
        <beans:value>jdbc:mysql://XXXXX:XXXX/XXXXX</beans:value>
    </beans:property>
    <beans:property name="username">
        <beans:value>XXXXX</beans:value>
    </beans:property>
    <beans:property name="password">
        <beans:value>XXXXXX</beans:value>
    </beans:property>
</beans:bean>

【问题讨论】:

【参考方案1】:

Spring Security 实现解决了非常具体的任务,在大多数情况下,这个任务只需要一个用户。如此多的 Spring Security 查询包含用户过滤器“where username = ?”。您可以通过下载源并搜索字符串 ["select ] 轻松检查所有可用查询。

因此,您应该在 DAO 层中为您的任务编写自己的查询(JDBC 或 Hibernate)。

【讨论】:

【参考方案2】:

否 - 查看您正在使用的 JdbcUserDetailsManager 的 API,没有列出所有用户或列出所有权限的方法。您需要编写自定义代码来执行此操作。

【讨论】:

以上是关于如何在 Spring Security 应用程序中列出 *all* 用户和 *all* 权限的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 中获取 userInformation?

如何在 Spring Web App 中临时禁用 Spring Security

如何在 Spring Security 中动态切换应用程序上下文?

如何在 Spring Boot + Spring Security 中添加一些身份验证步骤?

如何在 Spring Security 中将令牌转换为身份验证?

如何在 spring-security-oauth 中获取经过身份验证的用户