Login 管理
作者:唐亚峰 | battcn
字数统计:222 字
自定义登录类型
默认支持OAuth2.1 标准的登录模式
登录类型扩展
实现 IntegrationAuthenticator
接口即可自定义N种基于 grant_type:custom
方式的自定义登录,该项目默认提供了基于用户名密码和图文验证码方式,微信/短信可以参考图文依样画葫芦
案例:短信登录
java
package com.wemirr.platform.authority.configuration;
import com.wemirr.framework.commons.entity.Result;
import com.wemirr.framework.security.configuration.server.support.integration.IntegrationAuthentication;
import com.wemirr.framework.security.domain.UserInfoDetails;
import com.wemirr.framework.security.exception.OAuth2InvalidException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
/**
* 短信验证码认证.
*
* @author Levin
**/
@Slf4j
@Component
@RequiredArgsConstructor
public class SmsAuthenticator extends UsernamePasswordAuthenticator {
private final PasswordEncoder passwordEncoder;
@Override
public void prepare(final IntegrationAuthentication integrationAuthentication) {
// username = 手机号
String username = integrationAuthentication.getUsername();
// password = 短信验证码
String password = integrationAuthentication.getPassword();
// 验证 短信验证码
final Result<Boolean> result = smsService.valid(username, password);
if (!result.isSuccessful()) {
throw new OAuth2InvalidException(HttpStatus.BAD_REQUEST, result.getMessage());
}
super.prepare(integrationAuthentication);
}
@Override
public UserInfoDetails authenticate(final IntegrationAuthentication authentication) {
final UserInfoDetails info = new UserInfoDetails();
// info.set .....
// 重点是下面这个赋值的动作
info.setPassword(passwordEncoder.encode(authentication.getPassword()));
return info;
}
@Override
public String loginType() {
return "sms";
}
}