为了账号安全,请及时绑定邮箱和手机立即绑定

Springboot 安全配置未重定向到 successUrl

Springboot 安全配置未重定向到 successUrl

尚方宝剑之说 2021-11-17 15:27:32
我似乎不明白我的代码有什么问题。我正在尝试使用 Springboot 安全登录,一切似乎都正确,我可以在控制台上看到我的用户名和密码。谁能告诉我我出了什么问题?这是我的 SecSecurityConfig 类     package com.scanapp.config;     import com.scanapp.repositories.RoleRepository;     import com.scanapp.services.UserDetailsService;     import org.springframework.beans.factory.annotation.Autowired;     import org.springframework.beans.factory.annotation.Qualifier;     import org.springframework.context.annotation.Bean;     import org.springframework.context.annotation.Configuration;     import      org.springframework.security.authentication.dao.DaoAuthenticationProvider;     import org.springframework.security.crypto.password.PasswordEncoder;     @Configuration     @EnableWebSecurity     public class SecSecurityConfig extends WebSecurityConfigurerAdapter {     @Autowired     private RoleRepository roleRepository;    @Autowired    @Qualifier("myuserdet")    UserDetailsService userDetailsService;    protected void init(AuthenticationManagerBuilder auth) throws Exception {        System.out.println("I'm here");        auth.authenticationProvider(authProvider());    }    @Bean    public DaoAuthenticationProvider authProvider() {        System.out.println("got here");        DaoAuthenticationProvider authProvider = new        DaoAuthenticationProvider();        authProvider.setUserDetailsService(userDetailsService);        authProvider.setPasswordEncoder(passwordEncoder());        return authProvider;    }    @Bean    public PasswordEncoder passwordEncoder()      {        return new CustomPassword();       }
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

尝试从配置中删除此块。理论上,Spring 在幕后创建了所有这些 bean(自动获取您的 passwordEncoder 和 UserDetailsService)。


@Autowired

@Qualifier("myuserdet")

UserDetailsService userDetailsService;

protected void init(AuthenticationManagerBuilder auth) throws Exception {

    System.out.println("I'm here");

    auth.authenticationProvider(authProvider());

}


@Bean

public DaoAuthenticationProvider authProvider() {

    System.out.println("got here");

    DaoAuthenticationProvider authProvider = new 

   DaoAuthenticationProvider();

    authProvider.setUserDetailsService(userDetailsService);

    authProvider.setPasswordEncoder(passwordEncoder());

    return authProvider;

}

如果它不起作用,请尝试重命名您的 UserDetailsService(尽管这是一个远景)。


查看完整回答
反对 回复 2021-11-17
?
呼如林

TA贡献1798条经验 获得超3个赞

你的代码中有很多噪音。


1.您定义了自定义密码,它只是扩展了 BCryptPasswordEncoder。我建议返回


@Bean

public PasswordEncoder passwordEncoder(){

    return new BCryptPasswordEncoder();

}

2. 您定义了另一个 User 模型,该模型什么也不做,并且授予权限的列表为空。这很奇怪,因为如果权限列表为空,它应该会失败。请退回进口


org.springframework.security.core.userdetails.User;


//..

return new User(userName, encodedPassword, Collections.singletonList(new SimpleGrantedAuthority("USER")

3.最好为你的豆子使用另一个名字,而不是春天的名字。请将 UserDetailsService 重命名为 CustomUserDetailsService 并且不要在您的配置中使用限定符。


4.请确保当您将密码保存在数据库中时,它们会使用 BCryptPasswordEncoder 进行哈希处理。


查看完整回答
反对 回复 2021-11-17
?
隔江千里

TA贡献1906条经验 获得超10个赞

好的。另一个想法:根据文档,此方法不应返回 null:


@Override

public Collection<? extends GrantedAuthority> getAuthorities() {


        return null;

}

AuthorityUtils.NO_AUTHORITIES;而是返回。


理论上,它可以NullpointerException在您的 UserDetailsService 创建主体后的身份验证期间引发。如果那里有一个将军catch (Exception e),那么它将被简单地嵌入到AuthenticationException.


- - 编辑


哎哟!


您还应该将返回值更改为类true中的最后四个方法MyUserPrincipal:


@Override

public boolean isAccountNonExpired() {

    return true;

}


@Override

public boolean isAccountNonLocked() {

    return true;

}


@Override

public boolean isCredentialsNonExpired() {

    return true;

}


@Override

public boolean isEnabled() {

    return true;

}

你的校长总是被禁用和过期等等。当然是不允许登录的!:)


查看完整回答
反对 回复 2021-11-17
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信