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

Spring Security认证只适用于一个用户名和密码

朱兴运
2023-03-14

我在Spring Security中使用JDBC身份验证。我在MySQL数据库中有两个用户名密码对。

users
+----------+------------+---------+
| username | password   | enabled |
+----------+------------+---------+
| murat    | {noop}1a09 |       1 |
| test     | {noop}123  |       1 |
+----------+------------+---------+

authorities
+----------+-----------+
| username | authority |
+----------+-----------+
| murat    | USER      |
+----------+-----------+

但只有第一对可以登录。第二个错误如下:

您的登录尝试未成功,请重试。

原因:糟糕的资历

我试着用谷歌浏览器登录。但没用。

以下是授权代码:

package com.example.contactsapp.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import javax.sql.DataSource;

@Configuration
@EnableWebSecurity
public class ContactsAppSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource securityDataSource;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(securityDataSource);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                    .antMatchers("/").authenticated()
                .and()
                    .formLogin()
                .and()
                    .logout()
                        .logoutUrl("/logout")
                        .logoutSuccessUrl("/logoutSuccessful");

    }
}

共有3个答案

司空福
2023-03-14

更改功能

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(securityDataSource);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSource)
                .usersByUsernameQuery(
                        "select username,password, enabled from users where username=?")
                .authoritiesByUsernameQuery(
                        "select username, role from user_roles where username=?");
    } 
房星光
2023-03-14

在检查复杂场景之前,请检查第二个用户的第一个密码。将其设置为像123这样的简单密码,这样您就不会出错。如果它使用这个简单密码,这意味着问题与Spring有关。

如果它适用于123,但不适用于您的原始密码,请检查您是否有任何不属于ASCII的字符,例如您使用了一些特殊字符,如â, Ç, Ğ, Ö, Ü。如果您的密码中有这样的字符,那么问题可能是由您数据库的特定代码页引起的。要检查此问题,请写入控制台或记录您输入的密码(您想要检查的)和数据库中的密码。如果它们看起来不同,那么代码页就有问题。

胡彭亮
2023-03-14

请核实两件事:

1) 验证第二个用户是否具有与其关联的角色/权限。2) 删除第一个用户(这样数据库中只有一个用户)。查看安全性是否作为第二个用户通过。

 类似资料:
  • 如何初始化SDK并且让基本的用户名密码认证成功 通过阅读此文档,您可以完成用户密码登录认证,并成功启动VPN SDK 此文档默认已经集成SDK并且工程可以编译通过运行 您完全可以参考demo(特别是 AuthViewController.m)进行代码编写,但此文档仍然列出了必要的步骤 此文档只是参考,您应该根据具体需求因地适宜 此文档会略过如头文件import等基本概念与步骤,只介绍重要的概念 在

  • 问题内容: 目前,我正在使用Spring Security编写Web应用程序。我们有一个通过用户名和密码对用户进行身份验证的Web服务。 网络服务: 如何配置Spring Security将提供的用户名和密码传递给Web服务? 我写了一个仅接收用户名的。 我认为问题出在您的xml中。您是否关闭了自动配置?并且您的类是否扩展AbstractUserDetailsAuthenticationProvi

  • 问题内容: 我正在开发客户端/服务器身份验证程序,但是遇到了问题。客户端可以很好地与服务器建立连接,但是一旦我输入密码和用户名,它就不会返回有效的用户名/密码。如果用户使用正确的用户名/密码服务器登录,则应返回“ Welcome,username”,如果无效,则返回“登录失败”。我查看了printwriter和bufferedreader文档,以确保我使用正确的方法在服务器/客户端之间正确传递文本

  • ); 我的状况是这样的 我的任务是将一个用户名与一个密码匹配,但我出错了 我正在使用array_column函数来匹配我条件。

  • 我希望能够对客户机进行身份验证/授权,以产生/消费某些主题的消息。它们将是我们vpn的一部分(包括aws)。根据我对可用文档的理解,唯一的选择是颁发客户端证书并基于客户端DNS设置ACL?不幸的是,我不能使用我的私人CA(我在linux笔记本电脑上创建的)来创建客户端证书。于是出现了以下问题: null 请开导我:) 提前谢谢marcel

  • 本文向大家介绍Springboot+SpringSecurity+JWT实现用户登录和权限认证示例,包括了Springboot+SpringSecurity+JWT实现用户登录和权限认证示例的使用技巧和注意事项,需要的朋友参考一下 如今,互联网项目对于安全的要求越来越严格,这就是对后端开发提出了更多的要求,目前比较成熟的几种大家比较熟悉的模式,像RBAC 基于角色权限的验证,shiro框架专门用于