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

Spring Boot中的JDBC授权[复制]

微生宝
2023-03-14

我正在尝试使用JDBC(mysql)设置简单的身份验证和授权。下面是我用来初始化用户的sql:

INSERT INTO users(username,password,enabled)
VALUES ('admin','admin', true);
INSERT INTO user_roles (username, role)
VALUES ('admin', 'USER');
INSERT INTO user_roles (username, role)
VALUES ('admin', 'ADMIN');

数据源属性:

spring.datasource.password=xxxx 
spring.datasource.url=jdbc:mysql://localhost:3306/spring
spring.datasource.username=xxx

安全配置:

 class ApplicationSecurity extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource source;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/uploadfiles/**").access("hasRole('ADMIN')");
        http.authorizeRequests().antMatchers("/fonts/**").permitAll();
        http.authorizeRequests().antMatchers("/").permitAll();
        http.authorizeRequests().anyRequest().fullyAuthenticated().and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/").failureUrl("/login?error").permitAll().and()
                .logout().permitAll();
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(source).
                usersByUsernameQuery("select username,password,enabled from users where username=?").
                authoritiesByUsernameQuery("select username, role from user_roles where username=?");
    }

}

登录效果很好,但当作为管理员尝试打开/上传文件链接时,我得到403响应。我还试图检查角色是否正确,它们是否正确。我用以下代码检查了它们:

Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>)    SecurityContextHolder.getContext().getAuthentication().getAuthorities();
            authorities.forEach(authority -> logger.info(authority.toString()));

另外,当我设置inMemoryAuthentication时,它的工作原理与预期一致,所以我猜它必须是mysql配置的。有人看到我代码中的错误吗?

共有1个答案

侯令雪
2023-03-14

将您的SQL查询修改为:

select username, concat('ROLE_',role) from user_roles where username=?

角色是以“角色”为前缀的权限。

 类似资料:
  • 有没有办法绕过授权?

  • 本文向大家介绍SpringBoot Shiro授权实现过程解析,包括了SpringBoot Shiro授权实现过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringBoot Shiro授权实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用Shiro过滤器实现授权 设置好授权拦截跳转的请求地址 再使用 fil

  • 我想更好地理解隐式授权流和授权代码授权流之间的区别,因为我不确定我目前的理解是否正确。 隐式授权流主要由前端应用程序用于验证用户身份吗? 隐式授权流是否只需要一个client_id、用户名和密码来进行身份验证,换句话说,永远不会发送client_secret? 授权码只是一个短期令牌吗? 将授权码交换为访问令牌后,客户端可以访问用户帐户多长时间?具体地说,如果客户端是一个长时间运行的脚本,那么用户

  • 11.1 装配DataSource 加入数据库驱动 配置文件中加入如下配置,springboot会自动装配. spring在给我们装配好datasource的同时,会给我们装配一个JDBCTEMPLATE spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0

  • 授权是指验证用户是否允许做某件事的过程。Yii提供两种授权方法: 存取控制过滤器(ACF)和基于角色的存取控制(RBAC)。 存取控制过滤器 存取控制过滤器(ACF)是一种通过 yii\filters\AccessControl 类来实现的简单授权方法, 非常适用于仅需要简单的存取控制的应用。正如其名称所指,ACF 是一种动作过滤器 filter,可在控制器或者模块中使用。当一个用户请求一个动作时

  • 可能是NAS不支持返回的AVP以限制带宽。 AVP的单位也可能不匹配。例如,计数器期望值为Kbit / s而不是bit / s。 为了提高速度,应使用Perl代替Bash。如果你使用perl模块,当FreeRADIUS启动时,Perl解释器和Perl脚本将被加载到内存中。 FreeRADIUS内部使用的其他属性应在字典文件中定义,该文件位于FreeRADIUS配置目录下。 内部属性列表称为控制列表