为什么实现了UserDetailsService后却不生效?是不是还需要配置指定自己的实现类呢?看老师并没有额外的配置呀!

来源:4-3 自定义用户认证逻辑

慕移动6444835

2019-06-13

有加@Component注解,启动时,控制台仍然打印出一串默认密码,自定义的UserDetailsService实现类并没有生效。

写回答

3回答

鸿鹄yyn

2020-04-03

这里我添加一下我修改完成的代码  大家可以参考一下

  • package com.lin.security.browser.config;
    
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
    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 org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.security.crypto.password.PasswordEncoder;
    
    /**
     * @author Hognhu
     * @Dataon 2020/3/25
     */
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Autowired
        MyUserDetailService myUserDetailService;
    
        //注册一个密码转换器
        @Bean
        public PasswordEncoder passwordEncoder(){
            return new BCryptPasswordEncoder();
        }
    
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    
            //配置自定义的userDetails 和 passwordEncoder
            auth.userDetailsService(myUserDetailService).passwordEncoder(passwordEncoder());
    
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
    
            http
                   .formLogin()
                    .and()
                    .authorizeRequests()
                    .anyRequest()
                    .authenticated()
                    .and()
                    //跨站点请求伪造
                    .csrf()
                    .disable();
        }
    }
0
0

鸿鹄yyn

2020-04-03

首先 你要确保 你在 browser 模块下的config 要被 spring 扫描到 : 具体做法可以在 Application 启动类上加上componentScant

0
0

慕移动6444835

提问者

2019-06-13

自己找资料解决了,还需要在继承自WebSecurityConfigurerAdapter
的javaconfig里实现以下方法,设置自己的UserDetailsService实现,只是视频里没见老师这么做,怎么就默认认到了呢,奇了怪。
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
   auth.userDetailsService(myUserDetailsService);
}

0
2
云晴
请问为什么我也加了这段代码还是用户名密码错误?
2019-08-07
共2条回复

Spring Security技术栈开发企业级认证与授权

Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全

2662 学习 · 1561 问题

查看课程