| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 
 | 
 
 
 
 @Slf4j
 public class MobileLoginSuccessHandler implements AuthenticationSuccessHandler {
 
 private static final String BASIC_ = "Basic ";
 
 @Autowired
 private ObjectMapper objectMapper;
 
 @Autowired
 private PasswordEncoder passwordEncoder;
 
 @Autowired
 private ClientDetailsService clientDetailsService;
 
 @Lazy
 @Autowired
 private AuthorizationServerTokenServices defaultAuthorizationServerTokenServices;
 
 
 
 
 
 
 
 
 @Override
 public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
 Authentication authentication) {
 String header = request.getHeader(HttpHeaders.AUTHORIZATION);
 
 if (header == null || !header.startsWith(BASIC_)) {
 throw new UnapprovedClientAuthenticationException("请求头中client信息为空");
 }
 
 try {
 String[] tokens = AuthUtils.extractAndDecodeHeader(header);
 assert tokens.length == 2;
 String clientId = tokens[0];
 
 ClientDetails clientDetails = clientDetailsService.loadClientByClientId(clientId);
 
 
 if (!passwordEncoder.matches(tokens[1], clientDetails.getClientSecret())) {
 throw new InvalidClientException("Given client ID does not match authenticated client");
 
 }
 
 TokenRequest tokenRequest = new TokenRequest(MapUtil.newHashMap(), clientId, clientDetails.getScope(),
 "mobile");
 
 
 new DefaultOAuth2RequestValidator().validateScope(tokenRequest, clientDetails);
 OAuth2Request oAuth2Request = tokenRequest.createOAuth2Request(clientDetails);
 OAuth2Authentication oAuth2Authentication = new OAuth2Authentication(oAuth2Request, authentication);
 OAuth2AccessToken oAuth2AccessToken = defaultAuthorizationServerTokenServices
 .createAccessToken(oAuth2Authentication);
 log.info("获取token 成功:{}", oAuth2AccessToken.getValue());
 
 response.setCharacterEncoding(CharsetUtil.UTF_8);
 response.setContentType(MediaType.APPLICATION_JSON_VALUE);
 PrintWriter printWriter = response.getWriter();
 printWriter.append(objectMapper.writeValueAsString(oAuth2AccessToken));
 }
 catch (IOException e) {
 throw new BadCredentialsException("Failed to decode basic authentication token");
 }
 
 }
 
 }
 
 |