| 
															
																@ -1,18 +1,19 @@ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																package com.yihu.jw.security.oauth2.provider.endpoint; 
															 | 
															
															 | 
															
																package com.yihu.jw.security.oauth2.provider.endpoint; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.fasterxml.jackson.databind.ObjectMapper; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import com.yihu.jw.security.model.Captcha; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import com.yihu.jw.security.model.PublicKey; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService; 
															 | 
															
															 | 
															
																import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.security.oauth2.provider.error.WlyyOAuth2ExceptionTranslator; 
															 | 
															
															 | 
															
																import com.yihu.jw.security.oauth2.provider.error.WlyyOAuth2ExceptionTranslator; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.security.oauth2.provider.WlyyTokenGranter; 
															 | 
															
															 | 
															
																import com.yihu.jw.security.oauth2.provider.WlyyTokenGranter; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.security.core.userdetails.jdbc.WlyyUserDetailsService; 
															 | 
															
															 | 
															
																import com.yihu.jw.security.core.userdetails.jdbc.WlyyUserDetailsService; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.security.model.Oauth2Envelop; 
															 | 
															
															 | 
															
																import com.yihu.jw.security.model.Oauth2Envelop; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.security.model.WlyyUserSimple; 
															 | 
															
															 | 
															
																import com.yihu.jw.security.model.WlyyUserSimple; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import com.yihu.utils.security.RSAUtils; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import org.apache.commons.codec.binary.Base64; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.slf4j.Logger; 
															 | 
															
															 | 
															
																import org.slf4j.Logger; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.slf4j.LoggerFactory; 
															 | 
															
															 | 
															
																import org.slf4j.LoggerFactory; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.beans.factory.annotation.Autowired; 
															 | 
															
															 | 
															
																import org.springframework.beans.factory.annotation.Autowired; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.http.HttpHeaders; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.http.HttpStatus; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.http.ResponseEntity; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import org.springframework.http.*; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.security.authentication.AuthenticationManager; 
															 | 
															
															 | 
															
																import org.springframework.security.authentication.AuthenticationManager; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.security.core.userdetails.UsernameNotFoundException; 
															 | 
															
															 | 
															
																import org.springframework.security.core.userdetails.UsernameNotFoundException; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.security.oauth2.common.OAuth2AccessToken; 
															 | 
															
															 | 
															
																import org.springframework.security.oauth2.common.OAuth2AccessToken; 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -24,15 +25,27 @@ import org.springframework.security.oauth2.provider.request.DefaultOAuth2Request 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestValidator; 
															 | 
															
															 | 
															
																import org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestValidator; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; 
															 | 
															
															 | 
															
																import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.util.Assert; 
															 | 
															
															 | 
															
																import org.springframework.util.Assert; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import org.springframework.util.LinkedMultiValueMap; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import org.springframework.util.MultiValueMap; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.util.StringUtils; 
															 | 
															
															 | 
															
																import org.springframework.util.StringUtils; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.web.bind.annotation.*; 
															 | 
															
															 | 
															
																import org.springframework.web.bind.annotation.*; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import org.springframework.web.client.RestTemplate; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.web.context.request.RequestContextHolder; 
															 | 
															
															 | 
															
																import org.springframework.web.context.request.RequestContextHolder; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.web.context.request.ServletRequestAttributes; 
															 | 
															
															 | 
															
																import org.springframework.web.context.request.ServletRequestAttributes; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import javax.annotation.PostConstruct; 
															 | 
															
															 | 
															
																import javax.annotation.PostConstruct; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import javax.servlet.http.Cookie; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import javax.servlet.http.HttpServletRequest; 
															 | 
															
															 | 
															
																import javax.servlet.http.HttpServletRequest; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import javax.servlet.http.HttpServletResponse; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import javax.servlet.http.HttpSession; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.io.IOException; 
															 | 
															
															 | 
															
																import java.io.IOException; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.security.interfaces.RSAPrivateKey; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.security.interfaces.RSAPublicKey; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.text.SimpleDateFormat; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.util.Date; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.util.HashMap; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.util.Map; 
															 | 
															
															 | 
															
																import java.util.Map; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.util.UUID; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																/** 
															 | 
															
															 | 
															
																/** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 * <p> 
															 | 
															
															 | 
															
																 * <p> 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -64,26 +77,36 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @Autowired 
															 | 
															
															 | 
															
																    @Autowired 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    private WlyyUserDetailsService userDetailsService; 
															 | 
															
															 | 
															
																    private WlyyUserDetailsService userDetailsService; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @Autowired 
															 | 
															
															 | 
															
																    @Autowired 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    private WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    private RestTemplate restTemplate; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @Autowired 
															 | 
															
															 | 
															
																    @Autowired 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    private ObjectMapper objectMapper; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    private WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @PostConstruct 
															 | 
															
															 | 
															
																    @PostConstruct 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    private void init() { 
															 | 
															
															 | 
															
																    private void init() { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        super.setTokenGranter(tokenGranter); 
															 | 
															
															 | 
															
																        super.setTokenGranter(tokenGranter); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    /** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * 登陆 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param parameters 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param httpSession 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @return 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @throws Exception 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @RequestMapping(value = "/oauth/login", method = RequestMethod.POST) 
															 | 
															
															 | 
															
																    @RequestMapping(value = "/oauth/login", method = RequestMethod.POST) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> login(@RequestParam Map<String, String> parameters) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> login(@RequestParam Map<String, String> parameters, HttpSession httpSession) throws Exception { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String client_id = parameters.get("client_id"); 
															 | 
															
															 | 
															
																        String client_id = parameters.get("client_id"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (StringUtils.isEmpty(client_id)) { 
															 | 
															
															 | 
															
																        if (StringUtils.isEmpty(client_id)) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            throw new InvalidRequestException("client_id"); 
															 | 
															
															 | 
															
																            throw new InvalidRequestException("client_id"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (StringUtils.isEmpty(parameters.get("verify_code"))) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if (StringUtils.isEmpty(parameters.get("captcha"))) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            parameters.put("grant_type", "password"); 
															 | 
															
															 | 
															
																            parameters.put("grant_type", "password"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            if (parameters.get("password") != null) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																                RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)httpSession.getAttribute("privateKey"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																                parameters.put("password", RSAUtils.decryptByPrivateKey(new String(Base64.decodeBase64(parameters.get("password"))), rsaPrivateKey)); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } else { 
															 | 
															
															 | 
															
																        } else { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            parameters.put("grant_type", "verify_code"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            parameters.put("grant_type", "captcha"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id); 
															 | 
															
															 | 
															
																        ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id); 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -118,6 +141,11 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return getResponse(wlyyUserSimple); 
															 | 
															
															 | 
															
																        return getResponse(wlyyUserSimple); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    /** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * 单点登陆第二步 - token验证 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param parameters 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @return 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @RequestMapping(value = "/oauth/sso", method = RequestMethod.POST) 
															 | 
															
															 | 
															
																    @RequestMapping(value = "/oauth/sso", method = RequestMethod.POST) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> sso(@RequestParam Map<String, String> parameters) { 
															 | 
															
															 | 
															
																    public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> sso(@RequestParam Map<String, String> parameters) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String clientId = parameters.get("client_id"); 
															 | 
															
															 | 
															
																        String clientId = parameters.get("client_id"); 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -154,6 +182,12 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return getResponse(wlyyUserSimple); 
															 | 
															
															 | 
															
																        return getResponse(wlyyUserSimple); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    /** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * 登出 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param parameters 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param request 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @return 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @RequestMapping(value = "/oauth/logout", method = RequestMethod.POST) 
															 | 
															
															 | 
															
																    @RequestMapping(value = "/oauth/logout", method = RequestMethod.POST) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    public ResponseEntity<Oauth2Envelop> logout(@RequestParam Map<String, String> parameters, HttpServletRequest request) { 
															 | 
															
															 | 
															
																    public ResponseEntity<Oauth2Envelop> logout(@RequestParam Map<String, String> parameters, HttpServletRequest request) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String token = request.getHeader("token"); 
															 | 
															
															 | 
															
																        String token = request.getHeader("token"); 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -172,112 +206,125 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK); 
															 | 
															
															 | 
															
																        return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    /*@RequestMapping(value = ServiceApi.Authentication.VerifyCode, method = RequestMethod.POST) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    public ResponseEntity<Envelop> verifyCode(@RequestParam Map<String, String> parameters) throws  Exception{ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        Envelop envelop = new Envelop(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    /** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * 获取公钥 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param httpSession 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param httpServletResponse 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @return 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @throws Exception 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    @RequestMapping(value = "/oauth/public_key", method = RequestMethod.GET) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    public ResponseEntity<Oauth2Envelop<PublicKey>> publicKey ( 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            HttpSession httpSession, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            HttpServletResponse httpServletResponse) throws Exception { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        //生成公钥和私钥 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        HashMap<String, Object> map = RSAUtils.generateKeys(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        RSAPublicKey rsaPublicKey = (RSAPublicKey) map.get("public"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) map.get("private"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        PublicKey publicKey = new PublicKey(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        publicKey.setModulus(Base64.encodeBase64String(rsaPublicKey.getModulus().toByteArray())); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        publicKey.setExponent(Base64.encodeBase64String(rsaPublicKey.getPublicExponent().toByteArray())); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        httpSession.setAttribute("privateKey", rsaPrivateKey); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        //生成Cookie 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        Cookie cookie = new Cookie("oauth2", UUID.randomUUID().toString()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        cookie.setMaxAge(60); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        cookie.setPath("/oauth"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        httpServletResponse.addCookie(cookie); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        HttpHeaders headers = new HttpHeaders(); 
															 | 
															
															 | 
															
																        HttpHeaders headers = new HttpHeaders(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("Cache-Control", "no-store"); 
															 | 
															
															 | 
															
																        headers.set("Cache-Control", "no-store"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("Pragma", "no-cache"); 
															 | 
															
															 | 
															
																        headers.set("Pragma", "no-cache"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        Oauth2Envelop<PublicKey> oauth2Envelop = new Oauth2Envelop<>("public_key", 200, publicKey); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    /** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * 获取验证码 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param parameters 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @return 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @throws Exception 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    @RequestMapping(value = "/oauth/captcha", method = RequestMethod.GET) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    public ResponseEntity<Oauth2Envelop<Captcha>> captcha(@RequestParam Map<String, String> parameters) throws  Exception{ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String client_id = parameters.get("client_id"); 
															 | 
															
															 | 
															
																        String client_id = parameters.get("client_id"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String username = parameters.get("username"); 
															 | 
															
															 | 
															
																        String username = parameters.get("username"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if (StringUtils.isEmpty(client_id)) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            throw new InvalidRequestException("client_id"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (StringUtils.isEmpty(username)){ 
															 | 
															
															 | 
															
																        if (StringUtils.isEmpty(username)){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setSuccessFlg(false); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setErrorMsg("手机号码【"+username+"】不能为空!"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            return new ResponseEntity<>(envelop, headers, HttpStatus.OK); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            throw new InvalidRequestException("username"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        VerifyCode verifyCode = new VerifyCode(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        //手机短信验证码 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        RandomUtil randomUtil = new RandomUtil(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String random = randomUtil.getRandomString(6); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        //发送短信 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String api = "MsgGW.Sms.send"; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String content = "尊敬的用户:欢迎使用健康上饶,您的验证码为:【" + random + "】,有效期10分钟,请尽快完成注册。若非本人操作,请忽略。"; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        Map<String, String> apiParamMap = new HashMap<>(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        //手机号码 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        apiParamMap.put("mobile", username); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        //业务标签 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        apiParamMap.put("handlerId", fzHandlerId); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        //短信内容 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        apiParamMap.put("content", content); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        //渠道号 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        apiParamMap.put("clientId", fzClientId); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String result = null; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        Envelop resultEnvelop = fzApiClient.fzInnerApi(api, objectMapper.writeValueAsString(apiParamMap), 1); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (resultEnvelop.isSuccessFlg()) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            result = resultEnvelop.getObj().toString(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        //验证请求间隔超时,防止频繁获取验证码 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if (!wlyyRedisVerifyCodeService.isIntervalTimeout(client_id, username)) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            throw new IllegalAccessException("SMS request frequency is too fast"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (!StringUtils.isEmpty(result)) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            Map<String, Object> resultMap = objectMapper.readValue(result, Map.class); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            Integer resultCode = 0; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            if (null != resultMap.get("Code") && !"".equals(resultMap.get("Code"))) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                resultCode = Integer.valueOf(resultMap.get("Code").toString()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            if (resultCode == 10000) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                verifyCode.setExpiresIn(600); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                verifyCode.setNextRequestTime(60); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                //验证码有效期 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                ehrRedisVerifyCodeService.store(client_id, username, random, 600000); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setSuccessFlg(true); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setObj(verifyCode); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            } else if(resultCode == -201){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setSuccessFlg(false); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setErrorCode(resultCode); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setErrorMsg("短信已达每天限制的次数(10次)!"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            } else if(resultCode == -200){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setSuccessFlg(false); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setErrorCode(resultCode); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setErrorMsg("短信发送频率太快(不能低于60s)!"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            } else { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setSuccessFlg(false); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setErrorCode(resultCode); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                envelop.setErrorMsg("短信验证码发送失败!"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } else { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setSuccessFlg(false); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setErrorCode(ErrorCode.REQUEST_NOT_COMPLETED.value()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setErrorMsg("短信验证码发送失败!"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        //发送短信获取验证码 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        HttpHeaders reqHeaders = new HttpHeaders(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        reqHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        params.add("clientId", client_id); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        params.add("type", "login"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        params.add("to", username); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(params, reqHeaders); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        HashMap<String, Object> result = restTemplate.postForObject("http://svr-base:10020/sms_gateway/send", httpEntity, HashMap.class); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if (200 == (Integer) result.get("status")){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            Map<String, Object> sms =  (Map)result.get("obj"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            String captcha = (String) sms.get("captcha"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            Date deadline = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse((String) sms.get("deadline")); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            Long expire = (deadline.getTime() - new Date().getTime()) / 1000; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            Captcha _captcha = new Captcha(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            _captcha.setCode(captcha); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            _captcha.setExpiresIn(expire.intValue()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            wlyyRedisVerifyCodeService.store(client_id, username, captcha, expire.intValue()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            Oauth2Envelop<Captcha> oauth2Envelop = new Oauth2Envelop<>("captcha", 200, _captcha); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            HttpHeaders headers = new HttpHeaders(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            headers.set("Cache-Control", "no-store"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            headers.set("Pragma", "no-cache"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return new ResponseEntity<>(envelop, headers, HttpStatus.OK); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @RequestMapping(value = ServiceApi.Authentication.VerifyCodeExpire, method = RequestMethod.POST) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    public ResponseEntity<VerifyCode> verifyCodeExpire(@RequestParam Map<String, String> parameters) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String client_id = parameters.get("client_id"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String username = parameters.get("username"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        VerifyCode verifyCode = new VerifyCode(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        int expiresIn = ehrRedisVerifyCodeService.getExpireTime(client_id, username); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        int nextRequestTime = 60 + (expiresIn - 600 ) > 0 ? 60 + (expiresIn - 600 ) : 0; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        verifyCode.setNextRequestTime(nextRequestTime); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        verifyCode.setExpiresIn(expiresIn); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        throw new IllegalStateException((String) result.get("message")); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        /*Captcha _captcha = new Captcha(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        _captcha.setCode("12345"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        _captcha.setExpiresIn(10000); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        _captcha.setInterval(60); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        wlyyRedisVerifyCodeService.store(client_id, username, "12345", 100); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        Oauth2Envelop<Captcha> oauth2Envelop = new Oauth2Envelop("captcha", 200, _captcha); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        HttpHeaders headers = new HttpHeaders(); 
															 | 
															
															 | 
															
																        HttpHeaders headers = new HttpHeaders(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("Cache-Control", "no-store"); 
															 | 
															
															 | 
															
																        headers.set("Cache-Control", "no-store"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("Pragma", "no-cache"); 
															 | 
															
															 | 
															
																        headers.set("Pragma", "no-cache"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return new ResponseEntity<>(verifyCode, headers, HttpStatus.OK); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK);*/ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @RequestMapping(value = ServiceApi.Authentication.VerifyCodeValidate, method = RequestMethod.POST) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    public ResponseEntity<Envelop> verifyCodeValidate(@RequestParam Map<String, String> parameters) throws  Exception{ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        Envelop envelop = new Envelop(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        HttpHeaders headers = new HttpHeaders(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("Cache-Control", "no-store"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("Pragma", "no-cache"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    /** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * 验证验证码 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @param parameters 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @return 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     * @throws Exception 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    @RequestMapping(value = "/oauth/captcha", method = RequestMethod.POST) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    public ResponseEntity<Oauth2Envelop> captchaCheck  (@RequestParam Map<String, String> parameters) throws  Exception{ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String client_id = parameters.get("client_id"); 
															 | 
															
															 | 
															
																        String client_id = parameters.get("client_id"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String username = parameters.get("username"); 
															 | 
															
															 | 
															
																        String username = parameters.get("username"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String verifyCode = parameters.get("verify_code"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (StringUtils.isEmpty(verifyCode)){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setSuccessFlg(false); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setErrorMsg("验证码不能为空!"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            return new ResponseEntity<>(envelop, headers, HttpStatus.OK); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        String captcha = parameters.get("captcha"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if (StringUtils.isEmpty(client_id)) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            throw new InvalidRequestException("client_id"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        boolean _verify = ehrRedisVerifyCodeService.verification(client_id, username, verifyCode); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (_verify){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setSuccessFlg(true); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if (StringUtils.isEmpty(username)){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            throw new InvalidRequestException("username"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if (StringUtils.isEmpty(captcha)){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            throw new InvalidRequestException("captcha"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        Oauth2Envelop<Boolean> oauth2Envelop; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if (wlyyRedisVerifyCodeService.verification(client_id, username, captcha)) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            oauth2Envelop = new Oauth2Envelop<>("验证码正确", 200, true); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } else { 
															 | 
															
															 | 
															
																        } else { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setSuccessFlg(false); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            envelop.setErrorMsg("请输入正确的验证码!"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            oauth2Envelop = new Oauth2Envelop<>("验证码错误", 200, false); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return new ResponseEntity<>(envelop, headers, HttpStatus.OK); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    }*/ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        HttpHeaders headers = new HttpHeaders(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        headers.set("Cache-Control", "no-store"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        headers.set("Pragma", "no-cache"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @Override 
															 | 
															
															 | 
															
																    @Override 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    protected TokenGranter getTokenGranter() { 
															 | 
															
															 | 
															
																    protected TokenGranter getTokenGranter() { 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -308,27 +355,31 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    public ResponseEntity<Oauth2Envelop> handleException(Exception e) throws Exception { 
															 | 
															
															 | 
															
																    public ResponseEntity<Oauth2Envelop> handleException(Exception e) throws Exception { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        LOG.info(e.getMessage(), e); 
															 | 
															
															 | 
															
																        LOG.info(e.getMessage(), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (e instanceof UsernameNotFoundException) { 
															 | 
															
															 | 
															
																        if (e instanceof UsernameNotFoundException) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("用户未注册!", HttpStatus.UNAUTHORIZED.value())); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("用户未注册!", HttpStatus.UNAUTHORIZED.value()), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } else if (e instanceof NoSuchClientException) { 
															 | 
															
															 | 
															
																        } else if (e instanceof NoSuchClientException) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("应用未注册!", HttpStatus.UNAUTHORIZED.value())); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("应用未注册!", HttpStatus.UNAUTHORIZED.value()), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } else if (e instanceof InvalidGrantException) { 
															 | 
															
															 | 
															
																        } else if (e instanceof InvalidGrantException) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            if (e.getMessage().equals("verify_code")) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                return handleOAuth2Exception(new Oauth2Envelop("验证码有误!", HttpStatus.UNAUTHORIZED.value())); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            if (e.getMessage().contains("captcha")) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																                return handleOAuth2Exception(new Oauth2Envelop("验证码有误!", HttpStatus.UNAUTHORIZED.value()), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            } 
															 | 
															
															 | 
															
																            } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("密码有误!", HttpStatus.UNAUTHORIZED.value())); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("密码有误!", HttpStatus.UNAUTHORIZED.value()), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } else if (e instanceof InvalidTokenException) { 
															 | 
															
															 | 
															
																        } else if (e instanceof InvalidTokenException) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("Token有误!", HttpStatus.UNAUTHORIZED.value())); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("Token有误!", HttpStatus.UNAUTHORIZED.value()), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } else if (e instanceof InvalidRequestException) { 
															 | 
															
															 | 
															
																        } else if (e instanceof InvalidRequestException) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("参数" + e.getMessage() + "缺失!", HttpStatus.UNAUTHORIZED.value())); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("参数" + e.getMessage() + "缺失!", HttpStatus.UNAUTHORIZED.value()), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        } else if (e instanceof IllegalAccessException) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("短信请求频率过快,请稍后再试!", -1), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        } else if (e instanceof IllegalStateException) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            return handleOAuth2Exception(new Oauth2Envelop("短信网关请求失败!", -1), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        } 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return handleOAuth2Exception(new Oauth2Envelop(e.getMessage(), -1)); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        return handleOAuth2Exception(new Oauth2Envelop(e.getMessage(), -1), e); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    private ResponseEntity<Oauth2Envelop> handleOAuth2Exception(Oauth2Envelop authenticationFailed) throws IOException { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    private ResponseEntity<Oauth2Envelop> handleOAuth2Exception(Oauth2Envelop authenticationFailed, Exception e) throws IOException { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        HttpHeaders headers = new HttpHeaders(); 
															 | 
															
															 | 
															
																        HttpHeaders headers = new HttpHeaders(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("Cache-Control", "no-store"); 
															 | 
															
															 | 
															
																        headers.set("Cache-Control", "no-store"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("Pragma", "no-cache"); 
															 | 
															
															 | 
															
																        headers.set("Pragma", "no-cache"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        headers.set("WWW-Authenticate", String.format("%s %s", OAuth2AccessToken.BEARER_TYPE, authenticationFailed.getMessage())); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        headers.set("WWW-Authenticate", String.format("%s %s", OAuth2AccessToken.BEARER_TYPE, e.getMessage())); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        ResponseEntity<Oauth2Envelop> response = new ResponseEntity<>(authenticationFailed, headers, HttpStatus.OK); 
															 | 
															
															 | 
															
																        ResponseEntity<Oauth2Envelop> response = new ResponseEntity<>(authenticationFailed, headers, HttpStatus.OK); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return response; 
															 | 
															
															 | 
															
																        return response; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																    } 
															 |