美文网首页
spring secutiry密码验证的另一种解决办法(荐)

spring secutiry密码验证的另一种解决办法(荐)

作者: 爱余星痕 | 来源:发表于2018-03-01 13:36 被阅读0次

最近在集成sping security 到spring boot中,看到大部分登陆验证的代码都这么写

@Service
public class CustomUserService implements UserDetailsService { //自定义UserDetailsService 接口

    @Autowired
    UserDao userDao;
    @Autowired
    PermissionDao permissionDao;

    public UserDetails loadUserByUsername(String username) {
        SysUser user = userDao.findByUserName(username);
        if (user != null) {
            List<Permission> permissions = permissionDao.findByAdminUserId(user.getId());
            List<GrantedAuthority> grantedAuthorities = new ArrayList <>();
            for (Permission permission : permissions) {
                if (permission != null && permission.getName()!=null) {

                GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(permission.getName());
                grantedAuthorities.add(grantedAuthority);
                }
            }
            return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
        } else {
            throw new UsernameNotFoundException("admin: " + username + " do not exist!");
        }
    }

}

然后配置那时的代码为:

 @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(urlUserService).passwordEncoder(new PasswordEncoder() {

            @Override
            public String encode(CharSequence rawPassword) {
                return MD5Util.encode((String) rawPassword);
            }

            @Override
            public boolean matches(CharSequence rawPassword, String encodedPassword) {
                return encodedPassword.equals(MD5Util.encode((String) rawPassword));
            }
        });
    }

看到以上代码,我就有个疑问了。
loadUserByUsername是为什么要把用户的权限也获取了呢,如果密码不正确,那获取的权限也没有用,浪费性能。
个人调试了一下代码,发现登陆验证时,确实会调用到loadUserByUsername。
那怎么办呢?如何解决。
经查,解决办法如下;
1.不使用UserDetailsService,改为使用AbstractUserDetailsAuthenticationProvider
示例代码如下:


public class MucAppAuthenticationProvider extends
        AbstractUserDetailsAuthenticationProvider {
    private static Logger logger = LoggerFactory.getLogger(AbstractUserDetailsAuthenticationProvider.class);

    @Autowired
    SecurityUserService securityUserService;

    @Override
    protected void additionalAuthenticationChecks(UserDetails userDetails,
                                                  UsernamePasswordAuthenticationToken authentication)
            throws AuthenticationException {
        //如果想做点额外的检查,可以在这个方法里处理,校验不通时,直接抛异常即可
    }

    @Override
    protected UserDetails retrieveUser(String username,
                                       UsernamePasswordAuthenticationToken authentication)
            throws AuthenticationException {
        //获取用户权限或密码校验
        return loadUserDetail(username);
    }

    
    
}

2.配置WebSecurityConfigurer改为如下:

@Bean
    AppAuthenticationProvider appAuthenticationProvider() { // 注册UserDetailsService 的bean
        return new AppAuthenticationProvider();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
         auth.authenticationProvider(appAuthenticationProvider());
    }

经测试,登陆验证没有发现任何问题

相关文章

  • spring secutiry密码验证的另一种解决办法(荐)

    最近在集成sping security 到spring boot中,看到大部分登陆验证的代码都这么写 然后配置那时...

  • spring security密码验证

    今天开始做SSM项目,建好表之后,开始做登录功能,项目是从上个项目直接移植过来的 言归正传 这里是使用的表单提交的...

  • 使用 Spring Boot 发送邮件

    发送邮件是网站的必备功能之一,用户注册验证、忘记密码或者发送营销信息。Spring Boot使用 spring-b...

  • spring security 核心 --authenticat

    什么是Spring Security验证? 提示用户输入用户名和密码进行登录。 该系统 (成功) 验证该用户名的密...

  • 2021-06-15

    用户密码修改 以下是linux deploy相关问题 以下解决办法为笔者遇到问题的解决方法,均已验证。但linux...

  • 三、1 自定义登录

    我们用spring security,肯定不是用它自带的用户或密码进行验证的。所以需要我们进行DIY。 自定义登录...

  • Spring secutiry 源码解析 (一) —— 认证

    本系列源码分析是基于springboot 2.1.3版本, springcloud Greenwich.RELEA...

  • Spring secutiry 源码解析 (二) —— fi

    想要查看 spring security 的filter流程是从何开始, 只需在application.yml文件...

  • 生活是个bug

    请输入账号密码, 密码错误!x3 忘记密码, 验证问题, 验证成功, 重置密码,请输入新密码, 确认密码, 对不起...

  • 参考的文章

    验证码 图片验证码前端怎样获取后端生成的验证码图片,并且点击图片的时候改变验证码 记住密码 前端记住密码功能密码安...

网友评论

      本文标题:spring secutiry密码验证的另一种解决办法(荐)

      本文链接:https://www.haomeiwen.com/subject/nmugxftx.html