我正在学习Security,这是我的配置类,非常简单:
@Configuration
@EnableWebSecurity
public class Config extends WebSecurityConfigurerAdapter {
@Autowired
MyUserDetailsService myUserDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(myUserDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/")
.permitAll()
.antMatchers("/users")
.hasRole("isAdmin")
.antMatchers("/articles")
.hasRole("isUser")
.and()
.formLogin()
.permitAll();
}
}import org.springframework.security.core.userdetails.User;
@Service
public class MyUserDetailsService implements UserDetailsService {
@Autowired
UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
List<SimpleGrantedAuthority> simpleGrantedAuthorities = new ArrayList<>();
simpleGrantedAuthorities.add(new SimpleGrantedAuthority("isUser"));
return new User(username, "{noop}123456", simpleGrantedAuthorities);
}
}根据此配置,我允许任何人使用任何用户名和特定密码123456登录,并为每个用户提供isUser角色。
我希望任何人都可以用任何用户名登录并获得访问/articles的许可。
但不幸的是,当我尝试登录时,是的,登录是成功的,但是访问/articles失败了。
我找不到原因,我想已经给用户许可了,怎么了?
发布于 2019-04-01 08:54:45
答案可以在hasRole方法(链接)的javadoc中找到:
指定URL的快捷方式需要一个特定的角色。如果不希望自动插入"ROLE_“,请参阅hasAuthority(字符串)。 参数:角色-需要的角色(即用户、管理员等)。注意,它不应该以"ROLE_“开头,因为这是自动插入的。
因此,要么将ROLE_前缀添加到角色isUser中,要么使用hasAuthority方法而不是hasRole。
https://stackoverflow.com/questions/55449838
复制相似问题