我有一个问题。我有以下配置
@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获取角色的每个请求?我不明白这一点。你能帮忙吗?
答案 0 :(得分:0)
一旦用户获得授权,Spring就会在 ┌──────────────────────────────┐
│ {onChange: fn} │
└─────────────┬────────────────┘
│
│
│
│
┌──────────────────▼─────────────────────┐
│ │
│ HOC │
│ │
│ │
│ ┌──────────────────────┐ │
│ │ DataRow │ │
│ │ │ │
│ │ defaultProps: { │ │
│ │ onChange: fn │ │
│ │ } │ │
│ └──────────────────────┘ │
└────────────────────────────────────────┘
个对象中保留自己的角色。例如。在GrantedAuthority
实施中:GrantedAuthority
wchich只有一个字段 - > SimpleGrantedAuthority
。
所有权限都保存在与role
关联的Authentication
对象中,与当前执行线程相关联。