如何在 Spring Boot 安全中配置站点授权? [复制]
Posted
技术标签:
【中文标题】如何在 Spring Boot 安全中配置站点授权? [复制]【英文标题】:How to configure the site authorization in Spring Boot security? [duplicate] 【发布时间】:2019-09-29 10:56:29 【问题描述】:我在 Spring Boot 安全方面存在一些授权问题。首先在 application.properties 中,输入角色查询,如下所示,
# mysql Queries for AuthenticationManagerBuilder
spring.queries.users-query = SELECT username, password, role FROM blog_user WHERE username=?
spring.queries.roles-query = SELECT username, role FROM blog_user WHERE username=?
我做了 Spring Boot 安全配置
@Configuration
@EnableWebSecurity
public class BlogWebSecurityConfig extends WebSecurityConfigurerAdapter
@Autowired
private DataSource dataSource;
@Value("$spring.queries.users-query")
private String usersQuery;
@Value("$spring.queries.roles-query")
private String rolesQuery;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
// TODO Auto-generated method stub
auth.jdbcAuthentication().usersByUsernameQuery(usersQuery).authoritiesByUsernameQuery(rolesQuery)
.dataSource(dataSource).passwordEncoder(passwordEncoder());
@Override
protected void configure(HttpSecurity http) throws Exception
// TODO Auto-generated method stub
http.csrf().disable()
.authorizeRequests()
.antMatchers("/" ,"/home*", "/js/**", "/css/**", "/icon/**", "/users/login", "/users/register").permitAll()
.antMatchers("/users", "/posts/create", "posts/view", "/tags/create").hasAnyRole("USER") // only .permitAll() method makes it work.
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/users/login").defaultSuccessUrl("/")
.usernameParameter("username").passwordParameter("password")
.and()
.logout()
.invalidateHttpSession(true)
.clearAuthentication(true)
.logoutSuccessUrl("/").and()
.exceptionHandling().accessDeniedPage("/error/403");
@Bean
public PasswordEncoder passwordEncoder()
return new BCryptPasswordEncoder();
.hasAnyRole("USER")
线路效果不佳。站点“/users”、“/posts/create”、“posts/view”、“/tags/create”会引发 404 错误。我的意思是我的“用户”角色代码有一些问题。当我将角色方法.hasAnyRole("USER")
更改为.permitAll()
方法时,它就起作用了。如何将正确的授权角色代码放入我的系统?
【问题讨论】:
请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,聊天材料和缩写 txtspk,恳求,你多久了被卡住、投票建议、元评论等。只需解释您的问题,并展示您尝试过的内容、预期的内容以及实际发生的情况。 对不起我的英语不好。我会尽力使用技术表达。 【参考方案1】:你的 blog_user 表中的角色值应该以 ROLE_ 为前缀(即它应该是 ROLE_USER)。
Spring Security 4 在检查 hasRole() 时总是添加 ROLE_ 前缀。 有关更多信息,请参阅 Spring security 3 to 4 migration guide。
【讨论】:
以上是关于如何在 Spring Boot 安全中配置站点授权? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中设计两个单独的授权/身份验证配置?