mirror of
https://gitee.com/dromara/MaxKey.git
synced 2026-06-13 11:14:39 +08:00
@@ -64,6 +64,11 @@ public abstract class AbstractAuthenticationProvider {
|
||||
* 扫描认证
|
||||
*/
|
||||
public static final String SCAN_CODE = "scancode";
|
||||
|
||||
/**
|
||||
* 手机端APP
|
||||
*/
|
||||
public static final String APP = "app";
|
||||
}
|
||||
|
||||
protected ApplicationConfig applicationConfig;
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
package org.dromara.maxkey.authn.provider.impl;
|
||||
|
||||
import org.dromara.maxkey.authn.LoginCredential;
|
||||
import org.dromara.maxkey.authn.provider.AbstractAuthenticationProvider;
|
||||
import org.dromara.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.dromara.maxkey.authn.session.SessionManager;
|
||||
import org.dromara.maxkey.constants.ConstsLoginType;
|
||||
import org.dromara.maxkey.entity.idm.UserInfo;
|
||||
import org.dromara.maxkey.web.WebConstants;
|
||||
import org.dromara.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: orangeBabu
|
||||
* @time: 19/8/2024 PM3:41
|
||||
*/
|
||||
public class AppAuthenticationProvider extends AbstractAuthenticationProvider {
|
||||
private static final Logger _logger = LoggerFactory.getLogger(AppAuthenticationProvider.class);
|
||||
|
||||
public AppAuthenticationProvider() {
|
||||
super();
|
||||
}
|
||||
|
||||
public AppAuthenticationProvider(
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
SessionManager sessionManager) {
|
||||
this.authenticationRealm = authenticationRealm;
|
||||
this.sessionManager = sessionManager;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getProviderName() {
|
||||
return "app" + PROVIDER_SUFFIX;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Authentication doAuthenticate(LoginCredential loginCredential) {
|
||||
UsernamePasswordAuthenticationToken authenticationToken = null;
|
||||
_logger.debug("Trying to authenticate user '{}' via {}",
|
||||
loginCredential.getPrincipal(), getProviderName());
|
||||
try {
|
||||
|
||||
_logger.debug("authentication {}", loginCredential);
|
||||
|
||||
|
||||
emptyPasswordValid(loginCredential.getPassword());
|
||||
|
||||
emptyUsernameValid(loginCredential.getUsername());
|
||||
|
||||
//查询用户
|
||||
UserInfo userInfo = loadUserInfo(loginCredential.getUsername(), loginCredential.getPassword());
|
||||
|
||||
//Validate PasswordPolicy
|
||||
authenticationRealm.getPasswordPolicyValidator().passwordPolicyValid(userInfo);
|
||||
|
||||
statusValid(loginCredential, userInfo);
|
||||
|
||||
//Match password
|
||||
authenticationRealm.passwordMatches(userInfo, loginCredential.getPassword());
|
||||
|
||||
//apply PasswordSetType and resetBadPasswordCount
|
||||
authenticationRealm.getPasswordPolicyValidator().applyPasswordPolicy(userInfo);
|
||||
|
||||
authenticationToken = createOnlineTicket(loginCredential, userInfo);
|
||||
// user authenticated
|
||||
_logger.debug("'{}' authenticated successfully by {}.",
|
||||
loginCredential.getPrincipal(), getProviderName());
|
||||
|
||||
authenticationRealm.insertLoginHistory(userInfo,
|
||||
ConstsLoginType.LOCAL,
|
||||
"",
|
||||
"xe00000004",
|
||||
WebConstants.LOGIN_RESULT.SUCCESS);
|
||||
|
||||
} catch (
|
||||
AuthenticationException e) {
|
||||
_logger.error("Failed to authenticate user {} via {}: {}",
|
||||
loginCredential.getPrincipal(),
|
||||
getProviderName(),
|
||||
e.getMessage());
|
||||
WebContext.setAttribute(
|
||||
WebConstants.LOGIN_ERROR_SESSION_MESSAGE, e.getMessage());
|
||||
} catch (Exception e) {
|
||||
_logger.error("Login error Unexpected exception in {} authentication:\n{}",
|
||||
getProviderName(), e.getMessage());
|
||||
}
|
||||
|
||||
return authenticationToken;
|
||||
}
|
||||
}
|
||||
@@ -20,10 +20,7 @@ package org.dromara.maxkey.autoconfigure;
|
||||
import org.dromara.maxkey.authn.jwt.AuthTokenService;
|
||||
import org.dromara.maxkey.authn.provider.AbstractAuthenticationProvider;
|
||||
import org.dromara.maxkey.authn.provider.AuthenticationProviderFactory;
|
||||
import org.dromara.maxkey.authn.provider.impl.MobileAuthenticationProvider;
|
||||
import org.dromara.maxkey.authn.provider.impl.NormalAuthenticationProvider;
|
||||
import org.dromara.maxkey.authn.provider.impl.ScanCodeAuthenticationProvider;
|
||||
import org.dromara.maxkey.authn.provider.impl.TrustedAuthenticationProvider;
|
||||
import org.dromara.maxkey.authn.provider.impl.*;
|
||||
import org.dromara.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.dromara.maxkey.authn.session.SessionManager;
|
||||
import org.dromara.maxkey.authn.support.rememberme.AbstractRemeberMeManager;
|
||||
@@ -51,13 +48,15 @@ public class AuthnProviderAutoConfiguration {
|
||||
NormalAuthenticationProvider normalAuthenticationProvider,
|
||||
MobileAuthenticationProvider mobileAuthenticationProvider,
|
||||
TrustedAuthenticationProvider trustedAuthenticationProvider,
|
||||
ScanCodeAuthenticationProvider scanCodeAuthenticationProvider
|
||||
ScanCodeAuthenticationProvider scanCodeAuthenticationProvider,
|
||||
AppAuthenticationProvider appAuthenticationProvider
|
||||
) {
|
||||
AuthenticationProviderFactory authenticationProvider = new AuthenticationProviderFactory();
|
||||
authenticationProvider.addAuthenticationProvider(normalAuthenticationProvider);
|
||||
authenticationProvider.addAuthenticationProvider(mobileAuthenticationProvider);
|
||||
authenticationProvider.addAuthenticationProvider(trustedAuthenticationProvider);
|
||||
authenticationProvider.addAuthenticationProvider(scanCodeAuthenticationProvider);
|
||||
authenticationProvider.addAuthenticationProvider(appAuthenticationProvider);
|
||||
|
||||
return authenticationProvider;
|
||||
}
|
||||
@@ -89,6 +88,17 @@ public class AuthnProviderAutoConfiguration {
|
||||
);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public AppAuthenticationProvider appAuthenticationProvider(
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
SessionManager sessionManager
|
||||
) {
|
||||
return new AppAuthenticationProvider(
|
||||
authenticationRealm,
|
||||
sessionManager
|
||||
);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MobileAuthenticationProvider mobileAuthenticationProvider(
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
|
||||
Reference in New Issue
Block a user