首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot in-memory安全性与来自application.properties的用户

Spring Boot in-memory安全性与来自application.properties的用户
EN

Stack Overflow用户
提问于 2020-06-28 20:14:15
回答 1查看 536关注 0票数 0

我有一个基本的Spring Boot应用程序,它使用inMemoryAuthentication和在代码中声明的授权用户列表:

代码语言:javascript
复制
  @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("guest").password("{noop}guest1234").roles("USER");
        auth.inMemoryAuthentication().withUser("admin").password("{noop}password").roles("ADMIN");
    }

我想将用户/角色列表移动到application.properties文件中,例如,对于admin用户:

代码语言:javascript
复制
spring.security.user.name=admin
spring.security.user.password=password
spring.security.user.roles=ADMIN

然而,这似乎不起作用,因为我得到了一个403错误。我遗漏了什么?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-29 03:20:54

spring security只有一个默认用户,您可以使用自定义属性提供其他用户

代码语言:javascript
复制
...
    @Autowired
    private ApplicationProperties properties;
...
@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        InMemoryUserDetailsManagerConfigurer<AuthenticationManagerBuilder> builder = auth.inMemoryAuthentication();
        properties.getUsers().forEach(user -> {
            builder.withUser(user.getUsername()).password(user.getPassword()).roles((String[]) user.getRoles().toArray());
        });
    }

使用您的ApplicationProperties

代码语言:javascript
复制
@ConfigurationProperties(prefix = "application", ignoreUnknownFields = false)
public class ApplicationProperties {
    private final List<Users> users = new ArrayList<>();

    public static class Users {
        private String username;
        private String password;
        private List<String> roles;
        public String getUsername() {
            return username;
        }

        public void setRoles(List<String> roles) {
            this.roles = roles;
        }

        public String getPassword() {
            return password;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public void setPassword(String password) {
            this.password = password;
        }

        public List<String> getRoles() {
            return roles;
        }
    }

    public List<Users> getUsers() {
        return users;
    }
}

和你的.yaml文件(yaml没有.properties文件那么冗长)

代码语言:javascript
复制
spring:
  application:
    name: MyApp
...
application:
  users:
    -
      username: guest
      password: guest1234
      roles: USER
    -
      username: admin
      password: password
      roles: USER,ADMIN

我希望这能帮助你

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62622390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档