如何在Spring Security中使用动态角色

问题描述 投票:2回答:2

我正在开发一个Web服务,它使用Spring Security工具箱来授权“权限”。当然,Web服务有一个配置类,它扩展到WebSecurityConfigurerAdapter类并覆盖configure(HttpSecurity http)方法。

在方法中,我使用以下代码编写了配置文件(角色或权限):

           http
              .authorizeRequests() 
                         .antMatchers("/**").hasAnyAuthority("PERFIL")      
                         .anyRequest().authenticated()
                         .and() 
             .logout().clearAuthentication(true)
                      .invalidateHttpSession(true)
                      .and()

             .csrf().disable(); 

它工作得很好,但我想从数据库收取动态配置文件(角色或权限),因为我想在不更改Web服务的情况下更改它们。

有人知道怎么做吗?

问候。

java spring spring-mvc
2个回答
0
投票

为了从数据库传递这些详细信息,您必须更改许多配置。

使用jdbc-user-service定义查询以执行数据库身份验证。

<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 username, role from user_roles where username =?  " />
      </authentication-provider>
    </authentication-manager>

按照this教程了解Spring Security的工作原理。


0
投票

你可以找到一个完整的工作示例here

虽然我的项目中的逻辑是相反的,但您可以提取有助于您的案例的信息(如如何将这些权限“注入”弹簧安全性)

在Authorities类中,我定义了2个静态authorities。这是您可以从数据库中获取权限的点。您可以有一个空的List<Authority>,它将在您的应用程序启动时自动从db中填充(请参阅@PostConstruct)。

你的权威类应该像GrantedAuthority一样实现spring的here

© www.soinside.com 2019 - 2024. All rights reserved.