1.2.5.4 解析申请令牌错误信息
当账号输入错误应该返回用户不存在的信息,当密码错误要返回用户名或密码错误信息,业务流程图如下:
修改申请令牌的程序解析返回的错误: 由于restTemplate收到400或401的错误会抛出异常,而spring security针对账号不存在及密码错误会返回400及 401,所以在代码中控制针对400或401的响应不要抛出异常。
[AppleScript] 纯文本查看 复制代码
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ...... Map map = null; try { ( ( RestTemplate ) restTemplate ) .setErrorHandler ( new DefaultResponseErrorHandler ( ) { @Override public void handleError ( ClientHttpResponse response ) throws IOException { / / 设置 当响应 400 和 401 时照常响应数据,不要报错 if ( response.getRawStatusCode ( ) ! = 400 & & response.getRawStatusCode ( ) ! = 401 ) { super.handleError ( response ) ; } } } ) ; / / http请求spring security的申请令牌接口 ResponseEntity < Map > mapResponseEntity = restTemplate.exchange ( path , HttpMethod.POST , new HttpEntity < MultiValueMap < String , String > > ( formData , header ) , Map. class ) ; map = mapResponseEntity.getBody ( ) ; } catch ( Exception e ) { e.printStackTrace ( ) ; LOGGER. error ( "request oauth_token_password error: {}" , e.getMessage ( ) ) ; e.printStackTrace ( ) ; ExceptionCast.cast ( AuthCode.AUTH_LOGIN_APPLYTOKEN_FAIL ) ; } if ( map = = null || map. get ( "access_token" ) = = null || map. get ( "refresh_token" ) = = null || map. get ( "jti" ) = = null ) { / / jti是jwt令牌的唯一标识作为用户身份令牌 / / 获取spring security返回的错误信息 |
[AppleScript] 纯文本查看 复制代码
?
01 02 03 04 05 06 07 08 09 10 | String error_description = ( String ) map. get ( "error_description" ) ; if ( StringUtils.isNotEmpty ( error_description ) ) { if ( error_description. equals ( "坏的凭证" ) ) { ExceptionCast.cast ( AuthCode.AUTH_CREDENTIAL_ERROR ) ; } else if ( error_description.indexOf ( "UserDetailsService returned null" ) > = 0 ) { ExceptionCast.cast ( AuthCode.AUTH_ACCOUNT_NOTEXISTS ) ; } } ExceptionCast.cast ( AuthCode.AUTH_LOGIN_APPLYTOKEN_FAIL ) ; } ...... |
用户不存在:
1.2.5.5 测试
使用postman请求http://localhost:40400/auth/userlogin 1、输入正确的账号和密码进行测试
从数据库找到测试账号,本课程所提供的用户信息初始密码统一为111111 2、输入错误的账号和密码进行测试