Spring安全性如何理解用户角色是什么?

时间:2018-05-03 18:16:58

标签: java spring-security

我有一个问题。我有以下配置

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
      auth.jdbcAuthentication().dataSource(dataSource)
                .usersByUsernameQuery(
                        "select username,password, enabled from user where username=?")
                .authoritiesByUsernameQuery(
                        "select username, role from user inner join role on user.role_id = role.id where username=?").passwordEncoder(passwordencoder());
    }

    @Bean(name="passwordEncoder")
    public Md5PasswordEncoder passwordencoder(){
        return new Md5PasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        filter.setForceEncoding(true);
        http.addFilterBefore(filter,CsrfFilter.class);
        http.
                formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/add-ticket")
                .failureUrl("/"); 
        http
                .authorizeRequests()
                .antMatchers("/add-ticket").hasRole("ADMIN");
    }
}

问题是Spring安全性如何理解用户角色是什么?我的意思是,它在授权后会话中保存了一些信息还是什么?例如,它会在会话中保存用户名,并通过用户名从DB获取角色的每个请求?我不明白这一点。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

一旦用户获得授权,Spring就会在 ┌──────────────────────────────┐ │ {onChange: fn} │ └─────────────┬────────────────┘ │ │ │ │ ┌──────────────────▼─────────────────────┐ │ │ │ HOC │ │ │ │ │ │ ┌──────────────────────┐ │ │ │ DataRow │ │ │ │ │ │ │ │ defaultProps: { │ │ │ │ onChange: fn │ │ │ │ } │ │ │ └──────────────────────┘ │ └────────────────────────────────────────┘ 个对象中保留自己的角色。例如。在GrantedAuthority实施中:GrantedAuthority wchich只有一个字段 - > SimpleGrantedAuthority

所有权限都保存在与role关联的Authentication对象中,与当前执行线程相关联。