AbstractAuthenticationProvider.java 13.3 KB
Newer Older
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
 * 
 * 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;

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
23
import org.maxkey.authn.online.OnlineTicketServices;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
24
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
25
import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
26
import org.maxkey.configuration.ApplicationConfig;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
27
import org.maxkey.constants.ConstantsLoginType;
M
MaxKey 已提交
28
import org.maxkey.entity.UserInfo;
M
MaxKey 已提交
29
import org.maxkey.password.onetimepwd.AbstractOtpAuthn;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
30 31 32 33 34 35 36 37
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;
38 39
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
40
/**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
41
 * login Authentication abstract class.
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
42 43 44 45
 * 
 * @author Crystal.Sea
 *
 */
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
46
public abstract class AbstractAuthenticationProvider {
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
47 48
    private static final Logger _logger = 
            LoggerFactory.getLogger(AbstractAuthenticationProvider.class);
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
49

M
MaxKey 已提交
50 51 52 53 54
    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单点登录官方 已提交
55 56 57 58
    protected ApplicationConfig applicationConfig;

    protected AbstractAuthenticationRealm authenticationRealm;

M
Opt  
MaxKey 已提交
59
    protected AbstractOtpAuthn tfaOtpAuthn;
M
MaxKey 已提交
60 61
    
    protected AbstractOtpAuthn smsOtpAuthn;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
62

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

    protected abstract String getProviderName();

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
75
    protected abstract Authentication doInternalAuthenticate(LoginCredential authentication);
76
    
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
77
    public abstract Authentication basicAuthenticate(LoginCredential authentication) ;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
78

79 80 81 82 83 84 85
    public abstract Authentication trustAuthentication(
                                    String username, 
                                    String type, 
                                    String provider, 
                                    String code,
                                    String message);
    
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
86
    @SuppressWarnings("rawtypes")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
87
    public boolean supports(Class authentication) {
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
88 89 90
        return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
    }

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

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
120
        // user authenticated
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
121 122
        _logger.debug("'{}' authenticated successfully by {}.", 
                authentication.getPrincipal(), getProviderName());
123
        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
        changeSession(authentication);
        
        authenticationRealm.insertLoginHistory(
                WebContext.getUserInfo(), ConstantsLoginType.LOCAL, "", "xe00000004", "success");
        
        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));
        }
        
        //new Session        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
140
        WebContext.getSession().invalidate();
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
141 142 143 144 145
        
        for(String attributeName : WebContext.sessionAttributeNameList) {
            WebContext.setAttribute(attributeName, sessionAttributeMap.get(attributeName));
        }
        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
146
        _logger.debug("Login Success Session {}.", WebContext.getSession().getId());
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
147
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
148
   
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
149 150

    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
151
     * session validate.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
152
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
153
     * @param sessionId String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
154
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
155 156
    protected void sessionValid(String sessionId) {
        if (sessionId == null || !sessionId.equals(WebContext.getSession().getId())) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
157
            _logger.debug("login session valid error.");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
158 159 160 161
            _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单点登录官方 已提交
162
            throw new BadCredentialsException(message);
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
163 164
        }
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
165

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
166
    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
167
     * session validate.
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
168
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
169
     * @param jwtToken String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
170
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
171
    protected void jwtTokenValid(String jwtToken) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
172
        /*
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
173
         * if(jwtToken!=null && ! jwtToken.equals("")){
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
174 175 176 177 178
         * 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单点登录官方 已提交
179 180
    }

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

MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
197
    /**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
198
     * captcha validate .
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
199
     * 
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
200 201
     * @param authType String
     * @param captcha String
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
202
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
203
    protected void captchaValid(String captcha, String authType) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
204
        // for basic
M
MaxKey 已提交
205 206
        if (applicationConfig.getLoginConfig().isCaptcha() 
        		&& authType.equalsIgnoreCase(AuthType.NORMAL)) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
207 208 209 210 211 212 213 214 215
            _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单点登录官方 已提交
216
            }
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
217 218
        }
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
219

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

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

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
277 278 279 280 281 282
        if (userInfo != null) {
            if (userInfo.getUserType() == "SYSTEM") {
                _logger.debug("SYSTEM User Login. ");
            } else {
                _logger.debug("User Login. ");
            }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
283
            
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
284 285 286
        }

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

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

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

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

MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
328
    protected boolean userinfoValid(UserInfo userInfo, String username) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
329 330
        if (null == userInfo) {
            String message = WebContext.getI18nValue("login.error.username");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
331 332
            _logger.debug("login user  " + username + " not in this System ." + message);
            UserInfo loginUser = new UserInfo(username);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
333
            loginUser.setId(loginUser.generateId());
M
MaxKey 已提交
334
            loginUser.setUsername(username);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
335 336
            loginUser.setDisplayName("not exist");
            loginUser.setLoginCount(0);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
337
            authenticationRealm.insertLoginHistory(loginUser, ConstantsLoginType.LOCAL, "",
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
338 339 340 341
                    WebContext.getI18nValue("login.error.username"), "user not exist");
            throw new BadCredentialsException(WebContext.getI18nValue("login.error.username"));
        }
        return true;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
342
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
343

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
344 345 346 347 348 349 350 351
    public void setApplicationConfig(ApplicationConfig applicationConfig) {
        this.applicationConfig = applicationConfig;
    }

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

M
Opt  
MaxKey 已提交
352 353
    public void setTfaOtpAuthn(AbstractOtpAuthn tfaOtpAuthn) {
        this.tfaOtpAuthn = tfaOtpAuthn;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
354 355 356 357 358 359 360 361 362 363
    }

    public void setRemeberMeService(AbstractRemeberMeService remeberMeService) {
        this.remeberMeService = remeberMeService;
    }

    public void setOnlineTicketServices(OnlineTicketServices onlineTicketServices) {
        this.onlineTicketServices = onlineTicketServices;
    }

M
MaxKey 已提交
364 365 366
	public void setSmsOtpAuthn(AbstractOtpAuthn smsOtpAuthn) {
		this.smsOtpAuthn = smsOtpAuthn;
	}
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
367
}