使用自定义用户表

时间:2015-11-09 15:01:42

标签: spring-security spring-boot

我想为一些休息服务配置Spring启动和弹簧安全性。 我有表User,priviledge,priviledge_user 我有这个配置文件

WebSecurityConfig

@EnableWebSecurity
@Configuration
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().fullyAuthenticated().and().
                httpBasic().and().
                csrf().disable();
    }

}

和AuthenticationConfiguration

@Configuration
public class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter {
    @Autowired
    UserRepository userRepository;
    Logger log = LoggerFactory.getLogger(this.getClass());

    @Override
    public void init(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService());
    }

    @Bean
    UserDetailsService userDetailsService() {
        return new UserDetailsService() {

            @Override
            public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

                User account = userRepository.findByUsername(username);
                log.info("The user ({}) logged has the password {}", username, account.getPassword());
                org.springframework.security.core.userdetails.User userSession =  new org.springframework.security.core.userdetails.User(account.getUsername(), account.getPassword(), true, true, true, true,
                        AuthorityUtils.createAuthorityList("USER"));
                return userSession;
            }

        };
    }
}

验证代码似乎身份验证运行良好因为我有来自数据库的用户(我正在使用JNDI数据并且在application.properties中配置了这个) 但当我尝试在http://localhost:8080/上获取任何内容并设置我的凭据时,我无法访问并始终获得凭据提示 我做得怎么样?

2 个答案:

答案 0 :(得分:0)

您没有使用正确的权限实例化UserDetails对象。

不应始终将“USER”传递给AuthorityUtils.createAuthorityList方法,而应该为要加载的用户在privilege_user表中传递包含所有角色/权限的List。默认情况下,此角色的格式为“ROLE_USER”,“ROLE_ADMIN”......

因此,成功从数据库加载用户并不意味着身份验证过程运行良好。您仍然必须告诉他如何为该用户加载权限。

答案 1 :(得分:0)

问题是,您正在使用带有@CreatedBy或@LastModifiedBy批注的DB审计,但是您试图在任何用户登录之前插入文档。这种情况发生在创建新用户或在目标网页控制器中创建操作。为了克服这个问题,如果输入参数正确,则在数据库中有一个系统用户,例如system@yourdomain.com,然后在相应的控制器中设置主体。

在这样做的同时,DBAuditor将获取带注释文件的系统用户ID。确保在执行此操作后,加载新创建的用户主体。