【问题标题】:Spring Starter Security not authenticatingSpring Starter Security 未进行身份验证
【发布时间】:2019-02-07 12:47:47
【问题描述】:

当我添加具有“ROLE_USER”权限的用户时,我无法进行身份验证。尝试使用用户名:“用户名”和密码:“密码”进行身份验证时,始终返回 401。

我可以在输出的 JSON 中看到 BCryptPasswordEncoder 正在对密码进行编码,但无论我使用原始密码还是编码版本,我仍然无法进行身份验证。

我已经为此工作了几天,但无济于事。有什么我想念的吗?

代码如下--

数据库加载器:

User user = new User("first", "last", "username", "password", "email", "phone", new String[] {"ROLE_USER"});
userRepository.save(user);

详细服务:

@Component
public class DetailsService implements UserDetailsService {
    @Autowired
    UserRepository users;

    @Override
    public UserDetails loadUserByUsername(String userUsername) throws UsernameNotFoundException {
        User user = users.findByUsername(userUsername);
        if (user == null) {
            throw new UsernameNotFoundException(userUsername + " was not found");
        }
        return new org.springframework.security.core.userdetails.User(
                user.getUsername(),
                user.getUserPassword(),
                AuthorityUtils.createAuthorityList(user.getUserRoles())
        );
    }
}

WebSecurityConfig:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Autowired
    DetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService)
                .passwordEncoder(User.PASSWORD_ENCODER);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .anyRequest().authenticated()
                .and()
                .httpBasic()
                .and()
                .csrf().disable();
    }
}

用户:

@Entity
public class User {
    public static final PasswordEncoder PASSWORD_ENCODER = new BCryptPasswordEncoder();
    private long userId;
    private String userFirstName;
    private String userLastName;
    private String username;
    @JsonIgnore
    private String userPassword;
    private String userPhone;
    private String userEmail;
    @JsonIgnore
    private String[] userRoles;

    public User() {}

    public User(String userFirstName, String userLastName, String username, String userPassword, String userPhone, String userEmail, String[] userRoles) {
        this.userFirstName = userFirstName;
        this.userLastName = userLastName;
        this.username = username;
        setUserPassword(userPassword);
        this.userPhone = userPhone;
        this.userEmail = userEmail;
        this.userRoles = userRoles;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    @Column
    public String getUserFirstName() {
        return userFirstName;
    }

    public void setUserFirstName(String userFirstName) {
        this.userFirstName = userFirstName;
    }

    @Column
    public String getUserLastName() {
        return userLastName;
    }

    public void setUserLastName(String userLastName) {
        this.userLastName = userLastName;
    }

    @Column
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Column
    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = PASSWORD_ENCODER.encode(userPassword);
    }

    @Column
    public String getUserPhone() {
        return userPhone;
    }

    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone;
    }

    @Column
    public String getUserEmail() {
        return userEmail;
    }

    public void setUserEmail(String userEmail) {
        this.userEmail = userEmail;
    }

    @Column
    public String[] getUserRoles() {
        return userRoles;
    }

    public void setUserRoles(String[] userRoles) {
        this.userRoles = userRoles;
    }
}

【问题讨论】:

    标签: spring spring-mvc spring-boot spring-security spring-data-jpa


    【解决方案1】:

    您的问题对问题不是很清楚。但我猜你被困在弹簧启动器安全性的用户身份验证中。 你应该检查这个question

    【讨论】:

    • 你说得对,问题不够具体。它与密码编码器相关 - 将改写并提出一个新问题。谢谢!
    • 它确实帮助我了解了有关 Spring Starter Security 的更多信息。我的问题特别归结为密码编码器 - 编码的密码永远不会匹配。我完全放弃了它,现在使用存储在字符串中的纯文本密码。将在需要时进一步研究密码加密。谢谢!
    猜你喜欢
    • 2014-02-01
    • 2016-09-13
    • 2018-08-24
    • 2012-11-27
    • 2018-10-09
    • 2011-10-17
    • 1970-01-01
    • 2011-04-30
    相关资源
    最近更新 更多