请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

实现UserDetailsService达成用户名登录和短信登录

@Component
public class MyUserDetailsService implements UserDetailsService {
    private Logger logger= LoggerFactory.getLogger(getClass());
    @Autowired
    private PasswordEncoder passwordEncoder;
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        TUser user = userRepository.findByUsername(username);
        if (user != null) {
            logger.info("登录用户名:"+user.getUsername());
            logger.info("密码:"+passwordEncoder.encode(user.getPassword()));
            logger.info("User---->{}",user.toString());
            return user;

        }

        user.setUsername("查无此人");


        logger.info("User---->{}",user.toString());
        return user;
    }


}
@Component
public class MobileDetailsService implements UserDetailsService {
    private Logger logger= LoggerFactory.getLogger(getClass());
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String telPhone) throws UsernameNotFoundException {
        TUser user = userRepository.findByTelPhone(telPhone);
        if (user != null) {
            logger.info("登录用户名:"+user.getUsername());
            logger.info("User---->{}",user.toString());
            return user;

        }

        throw new InternalAuthenticationServiceException("无法获取用户信息");

    }


}
@Configuration
public class SmsCodeAuthenticationSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurityFilterChain,HttpSecurity> {

    @Autowired
    private AuthenticationFailureHandler imoocAuthenticationFailureHandler;

    @Autowired
    private AuthenticationSuccessHandler imoocAuthenticationSuccessHandler;

    @Autowired
//    @Qualifier("mobileDetailsService")
    @Qualifier("mobileDetailsService")
    private UserDetailsService userDetailsService;
@Configuration
public class BrowserSecurityConfig extends AbstractChannelSecurityConfig {
    @Autowired
    private SecurityProperties securityProperties;
    //IDE错误,此处忽略
    @Autowired
    private DataSource dataSource;

    @Autowired
    @Qualifier("myUserDetailsService")
    private UserDetailsService userDetailsService;

现在出现的问题是用户名登录走的不是我自己打的loadUserByUsername()而是InMemoryUserDetailsManager()走到这个类中,请问老师怎么解决这个问题?

正在回答

2回答

JoJo 2018-04-02 11:45:13

https://img1.sycdn.imooc.com//szimg/5ac1a72f0001e4df11150311.jpg

如图,在configure方法中,明确的指定使用的userDetailsService接口实现

0 回复 有任何疑惑可以回复我~
  • 提问者 mjka5632 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-04-02 21:01:30
提问者 mjka5632 2018-04-02 20:52:22
@Configuration
public class BrowserSecurityConfig extends AbstractChannelSecurityConfig {
    @Autowired
    private SecurityProperties securityProperties;
    //IDE错误,此处忽略
    @Autowired
    private DataSource dataSource;

    @Autowired
    @Qualifier("myUserDetailsService")
    private UserDetailsService userDetailsService;

    @Autowired
    private SmsCodeAuthenticationSecurityConfig smsCodeAuthenticationSecurityConfig;

    @Autowired
    private ValidateCodeSecurityConfig validateCodeSecurityConfig;


    /**
     *
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        applyPassowrdAuthenticationConfig(http);
        //导入配置
        http.apply(validateCodeSecurityConfig)
                .and()
        //--------------身份认证
                .apply(smsCodeAuthenticationSecurityConfig)

                .and()
                //记住我功能
                .rememberMe()
                //设置数据库Token
                .tokenRepository(persistentTokenRepository())
                //设置时效
                .tokenValiditySeconds(securityProperties.getBrowser().getRememberMeSeconds())
                //拿到User信息
                .userDetailsService(userDetailsService)
                //basic方式
//          http.httpBasic()
                .and()
                //--------对请求做授权(下面都是对授权的配置)
                .authorizeRequests()
                //这个url无需认证
                .antMatchers(SecurityConstants.DEFAULT_LOGIN_PROCESSING_URL_FORM,
                        SecurityConstants.DEFAULT_UNAUTHENTICATION_URL,
                        securityProperties.getBrowser().getLoginPage(),
                        SecurityConstants.DEFAULT_VALIDATE_CODE_URL_PREFIX+"/*")
                .permitAll()
                //任何请求
                .anyRequest()

                //都需要做身份认证
                .authenticated()
                .and()
                //跨站请求防护
                .csrf().disable()

        ;
    }


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号