当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot security中配置站点授权?[重复]

张星洲
2023-03-14

我在Spring Boot安全方面遇到了一些授权问题。首先是在应用程序中。属性,我键入如下所示的角色查询,

# 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(“用户”)行的效果不好。网站“/users”、“/posts/create”、“posts/view”、“/tags/create”抛出404个错误。我的意思是我的“用户”角色代码有一些问题。当我更改角色方法时。hasAnyRole(“用户”)。permitAll()方法,然后它就可以工作了。如何在系统中输入正确的授权角色代码?

共有1个答案

苏鸿羽
2023-03-14

blog_user表中role的值应该以role_作为前缀(即,它应该是role_user)。

Spring Security 4在检查hasRole()时总是添加角色前缀。有关更多信息,请参阅Spring security 3至4迁移指南。

 类似资料:
  • 我使用中的此选项在服务器中运行: 我得到这个错误: 分析INI配置文件时出错:未知的选项安全性。

  • 我试图在一个已经设置了基本auth的Spring Boot应用程序中配置CORS。 我在很多地方搜索过,包括这个答案,它指向官方文档中基于过滤器的CORS支持。 到目前为止还没有运气。

  • 我正在使用Google API Client Library for JavaScript(Beta)在Web应用程序上授权用户google帐户(用于youtube操作)。一切正常,但我不知道如何从我的应用程序中“注销”用户,即重置访问令牌。 例如,以下代码检查用户授权,如果没有,则显示弹出窗口,供用户登录帐户并允许web应用程序访问用户数据: 但是客户端库没有重置授权的方法。 有一个变通方法,将

  • 我有一个UBUNTU/APACHE框,当我尝试使用主机名访问web服务器时,它会将我带到DocumentRoot(即/var/www),并显示那里的所有文件/文件夹(如预期的那样)。 在我的 /var/www我有几个文件夹,如 /var/www/devel和var/www/live,我如何更新我的配置,以便当我通过它的主机名[超文本传输协议://servername]击中服务器时,它会进入默认情况

  • configure脚本支持几种本地配置决策方式。它们是用户指明外部软件的位置,包括或除去可选的特征, 以修改过的名称安装的程序,以及为configure选项设置缺省值的手段。 与外部软件一起工作 有些软件包需要,或者可选地使用其它已经安装的软件包。用户可以把命令行选项传递给configure 以指明使用那个外部软件。选项采用下列形式之一:--with-package[=arg]--without-

  • 3.5 配置站点信息 本节介绍如何配置站点信息,对应Nginx配置文件中的server部分。 站点信息下的映射规则对应着Nginx配置文件中的location部分。 来了一个网络请求,先按照端口和域名进行匹配,找到对应Nginx的哪一个站点配置 ---> 然后按照URL路径匹配该站点配置下的映射规则 ---> 匹配到一个映射规则后,执行映射规则下的指令,对流量进行处理或转发 站点配置流程如下: