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

Spring 4安全性jdbc身份验证

闾丘山
2023-03-14

我正在尝试让JDBC身份验证与我的小辅助项目一起工作,从表面上看,它应该可以工作,但它没有。所有的配置都遵循贝娄。

如果我切换到具有相同用户名/密码的inMemory身份验证,它就会非常工作。

这是我记录输出时得到的结果:

@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {

    auth.jdbcAuthentication().dataSource(dataSource)
            .usersByUsernameQuery("select user_name as username, password, enabled from gag.users as u where u.user_name=?")
            .authoritiesByUsernameQuery("select user_name as username, role from gag.user_roles as u where u.user_name=?");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
    // @formatter:off
    http.authorizeRequests()
            .antMatchers("/").permitAll()
            .antMatchers("/post/**").hasRole("USER")
            .and()
                .formLogin()
                    .loginPage("/login")
            .and()
                .exceptionHandling().accessDeniedPage("/denied")
            .and()
                .csrf().disable();
    // @formatter:on
}
CREATE TABLE gag.USERS(
    id SERIAL PRIMARY KEY,
    user_name varchar(30) UNIQUE,
    password varchar(30),
    enabled BOOLEAN NOT NULL DEFAULT TRUE
);

CREATE TABLE gag.USER_ROLES(
    id SERIAL PRIMARY KEY,
    user_name varchar(30) REFERENCES gag.USERS(user_name) NOT NULL,
    role varchar(30) NOT NULL,
    UNIQUE(user_name, role)
);

INSERT INTO gag.USERS(user_name, password, enabled) VALUES('admin', 'admin', TRUE);
INSERT INTO gag.USER_ROLES(user_name, role) VALUES('admin', 'USER');

共有1个答案

孔冥夜
2023-03-14

从版本4开始,Spring Security framework自动添加前缀role_。请参阅有关从Spring Security 3.x迁移到4.x的相关文档:

>

  • 8。自动角色前缀:

    Spring Security 4自动为任何角色添加role_前缀。这些改动是作为SEC-2758的一部分作出的

    INSERT INTO gag.USER_ROLES(user_name, role) VALUES('admin', 'ROLE_USER');
    

    如果您想省略role_前缀,您可能会发现上面链接的文章很有趣。

  •  类似资料:
    • 我正在开发REST webService,我的一些客户机将使用我的webservices,所以为了识别真正的客户机,我决定给每个真正的客户机一个唯一的应用程序令牌。客户机将对这个令牌进行编码,他们将把这个令牌放在请求头中,我已经在我的REST webservices中配置了一个REST过滤器来验证令牌。我不想使用https。我的问题是,任何人都可以从我的客户端站点获取该令牌,并可以使用我的REST

    • 问题内容: 背景: 我正在为REST Web服务设计身份验证方案。这并不是“真正”需要安全的(它更多是一个个人项目),但我想使其与练习/学习经验一样安全。我不想使用SSL,因为我不想麻烦,而在大多数情况下,它不需要设置它。 要解决这个问题: S3和OAuth都依赖于对请求URL以及一些选定的标头进行签名。他们都没有在POST或PUT请求的请求主体上签名。这难道不容易受到中间人攻击,这种中间人攻击会

    • 我正在尝试通过连接到LDAP使用Spring Security进行我的第一个演示。 我使用的Sping版本是:3.1.0.RELEASE 以下是我的security-integration.xml: 然而,每当我部署我的战争时,我都会遇到这个例外: HTTP状态500 - 类型异常报告 消息 描述服务器遇到一个内部错误(),该错误阻止它完成此请求。 例外情况 javax.servlet。Servl

    • 但是该实现假设身份验证也是通过存储在数据库中的密码(@Password注释)完成的。我们希望根据LDAP对用户进行身份验证,然后根据存储在数据库中的内容分配角色。 是否有可用的教程/拦截器?我为每一个输入感到高兴? PS:quarkus安全ldap扩展不是解决方案,因为它假设角色也存储在ldap中。

    • 我们的项目包括一个JavaFX应用程序,它通过RMI协议调用JEE服务器。我们使用Payara应用服务器,一个Glassfish分叉。我们想使用带有数据库的JAAS来管理授权给用户的身份验证和权限。 我们不了解如何将创建的JDBC领域与我们的应用程序绑定以与数据库交互。 我们可以像这里一样以编程方式调用领域或直接查询数据库吗? 启动LoginContext的服务: 登录模块: CallBackHa