AbstractAuthenticationProvider.java 13.8 KB
Newer Older
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
1
/*
M
220413  
MaxKey 已提交
2
 * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
18 19
package org.maxkey.authn;

20
import java.util.ArrayList;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
21 22
import java.util.HashMap;

M
MaxKey 已提交
23
import org.maxkey.authn.online.OnlineTicketService;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
24
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
25
import org.maxkey.configuration.ApplicationConfig;
M
v 3.3.0  
MaxKey 已提交
26 27
import org.maxkey.constants.ConstsLoginType;
import org.maxkey.constants.ConstsStatus;
M
MaxKey 已提交
28
import org.maxkey.entity.UserInfo;
M
MaxKey 已提交
29
import org.maxkey.password.onetimepwd.AbstractOtpAuthn;
M
v 3.3.0  
MaxKey 已提交
30
import org.maxkey.password.onetimepwd.OtpAuthnService;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
31 32 33 34 35 36 37 38
import org.maxkey.web.WebConstants;
import org.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
39 40
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
41
/**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
42
 * login Authentication abstract class.
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
43 44 45 46
 * 
 * @author Crystal.Sea
 *
 */
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
47
public abstract class AbstractAuthenticationProvider {
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
48 49
    private static final Logger _logger = 
            LoggerFactory.getLogger(AbstractAuthenticationProvider.class);
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
50

M
MaxKey 已提交
51 52 53 54 55
    public class AuthType{
    	public final static String NORMAL 	= "normal";
    	public final static String TFA 		= "tfa";
    	public final static String MOBILE 	= "mobile";
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
56 57 58 59
    protected ApplicationConfig applicationConfig;

    protected AbstractAuthenticationRealm authenticationRealm;

M
Opt  
MaxKey 已提交
60
    protected AbstractOtpAuthn tfaOtpAuthn;
M
MaxKey 已提交
61
    
M
v 3.3.0  
MaxKey 已提交
62
    protected OtpAuthnService otpAuthnService;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
63

M
MaxKey 已提交
64
    protected OnlineTicketService onlineTicketServices;
65
    
M
MaxKey 已提交
66
    public static  ArrayList<GrantedAuthority> grantedAdministratorsAuthoritys = new ArrayList<GrantedAuthority>();
67 68 69 70
    
    static {
        grantedAdministratorsAuthoritys.add(new SimpleGrantedAuthority("ROLE_ADMINISTRATORS"));
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
71 72 73

    protected abstract String getProviderName();

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
74
    protected abstract Authentication doInternalAuthenticate(LoginCredential authentication);
75
    
76
    public    abstract Authentication authentication(LoginCredential loginCredential,boolean isTrusted);
77
    
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
78
    @SuppressWarnings("rawtypes")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
79
    public boolean supports(Class authentication) {
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
80 81 82
        return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
    }

MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
83 84
    /**
     * authenticate .
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
85
     * 
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
86
     */
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
87
    public Authentication authenticate(LoginCredential loginCredential) 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
88 89
            throws AuthenticationException {
        _logger.debug("Trying to authenticate user '{}' via {}", 
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
90
                loginCredential.getPrincipal(), getProviderName());
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
91 92
        // 登录SESSION
        _logger.debug("Login  Session {}.", WebContext.getSession().getId());
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
93
        Authentication authentication = null;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
94
        try {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
95
            authentication = doInternalAuthenticate(loginCredential);
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
96
        } catch (AuthenticationException e) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
97
            _logger.error("Failed to authenticate user {} via {}: {}",
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
98 99 100
                    new Object[] {  loginCredential.getPrincipal(),
                                    getProviderName(),
                                    e.getMessage() });
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
101 102
            WebContext.setAttribute(
                    WebConstants.LOGIN_ERROR_SESSION_MESSAGE, e.getMessage());
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
103
        } catch (Exception e) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
104 105
            _logger.error("Login error Unexpected exception in {} authentication:\n{}" ,
                            getProviderName(), e.getMessage());
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
106
        }
107 108
        
        if (authentication== null || !authentication.isAuthenticated()) {
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
109 110
            return authentication;
        }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
111

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
112
        // user authenticated
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
113 114
        _logger.debug("'{}' authenticated successfully by {}.", 
                authentication.getPrincipal(), getProviderName());
115
        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
116 117
        changeSession(authentication);
        
M
authn  
MaxKey 已提交
118
        authenticationRealm.insertLoginHistory(((SigninPrincipal) authentication.getPrincipal()).getUserInfo(), 
M
v 3.3.0  
MaxKey 已提交
119
						        				ConstsLoginType.LOCAL, 
M
MaxKey 已提交
120 121 122
								                "", 
								                "xe00000004", 
								                WebConstants.LOGIN_RESULT.SUCCESS);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
123 124 125 126 127 128 129 130 131
        
        return authentication;
    }
    
    protected void changeSession(Authentication authentication) {
        
        HashMap<String,Object> sessionAttributeMap = new HashMap<String,Object>();
        for(String attributeName : WebContext.sessionAttributeNameList) {
            sessionAttributeMap.put(attributeName, WebContext.getAttribute(attributeName));
M
MaxKey 已提交
132
            WebContext.removeAttribute(attributeName);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
133 134 135
        }
        
        //new Session        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
136
        WebContext.getSession().invalidate();
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
137 138 139 140
        
        for(String attributeName : WebContext.sessionAttributeNameList) {
            WebContext.setAttribute(attributeName, sessionAttributeMap.get(attributeName));
        }
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
141
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
142
   
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
143 144

    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
145
     * session validate.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
146
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
147
     * @param sessionId String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
148
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
149 150
    protected void sessionValid(String sessionId) {
        if (sessionId == null || !sessionId.equals(WebContext.getSession().getId())) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
151
            _logger.debug("login session valid error.");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
152 153 154 155
            _logger.debug("login session sessionId " + sessionId);
            _logger.debug("login getSession sessionId " + WebContext.getSession().getId());
            
            String message = WebContext.getI18nValue("login.error.session");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
156
            throw new BadCredentialsException(message);
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
157 158
        }
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
159

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
160
    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
161
     * session validate.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
162
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
163
     * @param jwtToken String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
164
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
165
    protected void jwtTokenValid(String jwtToken) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
166
        /*
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
167
         * if(jwtToken!=null && ! jwtToken.equals("")){
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
168 169 170 171 172
         * if(jwtLoginService.jwtTokenValidation(j_jwtToken)){ return; } }
         */
        String message = WebContext.getI18nValue("login.error.session");
        _logger.debug("login session valid error.");
        throw new BadCredentialsException(message);
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
173 174
    }

MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
175
    protected void authTypeValid(String authType) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
176 177
        _logger.debug("Login AuthN Type  " + authType);
        if (authType != null && (
M
MaxKey 已提交
178 179 180 181
                authType.equalsIgnoreCase(AuthType.NORMAL) 
                || authType.equalsIgnoreCase(AuthType.TFA)
                || authType.equalsIgnoreCase(AuthType.MOBILE)
        		)
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
182 183
            ) {
            return;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
184
        }
185 186
        
        final   String message = WebContext.getI18nValue("login.error.authtype");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
187
        _logger.debug("Login AuthN type must eq basic or tfa , Error message is {}" , message);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
188
        throw new BadCredentialsException(message);
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
189
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
190

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
191
    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
192
     * captcha validate .
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
193
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
194 195
     * @param authType String
     * @param captcha String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
196
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
197
    protected void captchaValid(String captcha, String authType) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
198
        // for basic
M
MaxKey 已提交
199
        if (authType.equalsIgnoreCase(AuthType.NORMAL)) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
200 201 202 203 204 205 206 207 208
            _logger.info("captcha : "
                    + WebContext.getSession().getAttribute(
                            WebConstants.KAPTCHA_SESSION_KEY).toString());
            if (captcha == null || !captcha
                    .equals(WebContext.getSession().getAttribute(
                                    WebConstants.KAPTCHA_SESSION_KEY).toString())) {
                String message = WebContext.getI18nValue("login.error.captcha");
                _logger.debug("login captcha valid error.");
                throw new BadCredentialsException(message);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
209
            }
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
210 211
        }
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
212

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
213
    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
214
     * captcha validate.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
215
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
216 217 218
     * @param otpCaptcha String
     * @param authType   String
     * @param userInfo   UserInfo
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
219
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
220 221
    protected void tftcaptchaValid(String otpCaptcha, String authType, UserInfo userInfo) {
        // for one time password 2 factor
M
MaxKey 已提交
222 223
        if (applicationConfig.getLoginConfig().isMfa() 
        		&& authType.equalsIgnoreCase(AuthType.TFA)) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
224 225
            UserInfo validUserInfo = new UserInfo();
            validUserInfo.setUsername(userInfo.getUsername());
M
MaxKey 已提交
226
            validUserInfo.setSharedSecret(userInfo.getSharedSecret());
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
227 228
            validUserInfo.setSharedCounter(userInfo.getSharedCounter());
            validUserInfo.setId(userInfo.getId());
M
Opt  
MaxKey 已提交
229
            if (otpCaptcha == null || !tfaOtpAuthn.validate(validUserInfo, otpCaptcha)) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
230 231 232
                String message = WebContext.getI18nValue("login.error.captcha");
                _logger.debug("login captcha valid error.");
                throw new BadCredentialsException(message);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
233 234
            }
        }
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
235
    }
M
MaxKey 已提交
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
    
    /**
     * mobile validate.
     * 
     * @param otpCaptcha String
     * @param authType   String
     * @param userInfo   UserInfo
     */
    protected void mobilecaptchaValid(String password, String authType, UserInfo userInfo) {
        // for mobile password
        if (applicationConfig.getLoginConfig().isMfa() 
        		&& authType.equalsIgnoreCase(AuthType.MOBILE)) {
            UserInfo validUserInfo = new UserInfo();
            validUserInfo.setUsername(userInfo.getUsername());
            validUserInfo.setId(userInfo.getId());
M
v 3.3.0  
MaxKey 已提交
251
            AbstractOtpAuthn smsOtpAuthn = otpAuthnService.getByInstId(userInfo.getInstId());
M
MaxKey 已提交
252 253 254 255 256 257 258
            if (password == null || !smsOtpAuthn.validate(validUserInfo, password)) {
                String message = WebContext.getI18nValue("login.error.captcha");
                _logger.debug("login captcha valid error.");
                throw new BadCredentialsException(message);
            }
        }
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
259

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
260
    /**
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
261
     * login user by j_username and j_cname first query user by j_cname if first
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
262
     * step userinfo is null,query user from system.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
263
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
264 265
     * @param username String
     * @param password String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
266 267
     * @return
     */
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
268
    public UserInfo loadUserInfo(String username, String password) {
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
269
        UserInfo userInfo = authenticationRealm.loadUserInfo(username, password);
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
270

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
271 272 273 274 275 276
        if (userInfo != null) {
            if (userInfo.getUserType() == "SYSTEM") {
                _logger.debug("SYSTEM User Login. ");
            } else {
                _logger.debug("User Login. ");
            }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
277
            
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
278 279 280
        }

        return userInfo;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
281
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
282

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
283
    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
284
     * check input password empty.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
285
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
286
     * @param password String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
287 288
     * @return
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
289 290
    protected boolean emptyPasswordValid(String password) {
        if (null == password || "".equals(password)) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
291 292 293
            throw new BadCredentialsException(WebContext.getI18nValue("login.error.password.null"));
        }
        return true;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
294
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
295

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
296
    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
297
     * check input username or password empty.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
298
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
299
     * @param email String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
300 301
     * @return
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
302 303
    protected boolean emptyEmailValid(String email) {
        if (null == email || "".equals(email)) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
304 305 306
            throw new BadCredentialsException("login.error.email.null");
        }
        return true;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
307
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
308

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
309
    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
310
     * check input username empty.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
311
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
312
     * @param username String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
313 314
     * @return
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
315 316
    protected boolean emptyUsernameValid(String username) {
        if (null == username || "".equals(username)) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
317 318 319
            throw new BadCredentialsException(WebContext.getI18nValue("login.error.username.null"));
        }
        return true;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
320
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
321

M
MaxKey 已提交
322
    protected boolean statusValid(LoginCredential loginCredential , UserInfo userInfo) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
323
        if (null == userInfo) {
M
MaxKey 已提交
324 325 326
            String i18nMessage = WebContext.getI18nValue("login.error.username");
            _logger.debug("login user  " + loginCredential.getUsername() + " not in this System ." + i18nMessage);
            UserInfo loginUser = new UserInfo(loginCredential.getUsername());
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
327
            loginUser.setId(loginUser.generateId());
M
MaxKey 已提交
328
            loginUser.setUsername(loginCredential.getUsername());
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
329 330
            loginUser.setDisplayName("not exist");
            loginUser.setLoginCount(0);
M
MaxKey 已提交
331 332
            authenticationRealm.insertLoginHistory(
            			loginUser, 
M
v 3.3.0  
MaxKey 已提交
333
            			ConstsLoginType.LOCAL, 
M
MaxKey 已提交
334 335 336 337 338
            			"",
            			i18nMessage,
            			WebConstants.LOGIN_RESULT.USER_NOT_EXIST);
            throw new BadCredentialsException(i18nMessage);
        }else {
M
v 3.3.0  
MaxKey 已提交
339
        	if(userInfo.getIsLocked()==ConstsStatus.LOCK) {
M
MaxKey 已提交
340 341 342 343 344 345 346
        		authenticationRealm.insertLoginHistory( 
        				userInfo, 
                        loginCredential.getAuthType(), 
                        loginCredential.getProvider(), 
                        loginCredential.getCode(), 
                        WebConstants.LOGIN_RESULT.USER_LOCKED
                    );
M
v 3.3.0  
MaxKey 已提交
347
        	}else if(userInfo.getStatus()!=ConstsStatus.ACTIVE) {
M
MaxKey 已提交
348 349 350 351 352 353 354 355
        		authenticationRealm.insertLoginHistory( 
        				userInfo, 
                        loginCredential.getAuthType(), 
                        loginCredential.getProvider(), 
                        loginCredential.getCode(), 
                        WebConstants.LOGIN_RESULT.USER_INACTIVE
                    );
        	}
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
356 357
        }
        return true;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
358
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
359

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
360 361 362 363 364 365 366 367
    public void setApplicationConfig(ApplicationConfig applicationConfig) {
        this.applicationConfig = applicationConfig;
    }

    public void setAuthenticationRealm(AbstractAuthenticationRealm authenticationRealm) {
        this.authenticationRealm = authenticationRealm;
    }

M
Opt  
MaxKey 已提交
368 369
    public void setTfaOtpAuthn(AbstractOtpAuthn tfaOtpAuthn) {
        this.tfaOtpAuthn = tfaOtpAuthn;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
370 371
    }

M
MaxKey 已提交
372
    public void setOnlineTicketServices(OnlineTicketService onlineTicketServices) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
373 374 375
        this.onlineTicketServices = onlineTicketServices;
    }

M
v 3.3.0  
MaxKey 已提交
376 377
	public void setOtpAuthnService(OtpAuthnService otpAuthnService) {
		this.otpAuthnService = otpAuthnService;
M
MaxKey 已提交
378
	}
M
v 3.3.0  
MaxKey 已提交
379

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
380
}