微信小程序登录流程时序
jwt令牌配置
sky:
wechat:
appid: wx8780a37323517afa
secret: f01ec214a64dec164faa9d2003c6f27f
生成jwt令牌
User user= userService. wxlogin ( userLoginDTO) ;
Map < String , Object > claims= new HashMap < > ( ) ;
claims. put ( JwtClaimsConstant . USER_ID , user. getId ( ) ) ;
String token= JwtUtil . createJWT ( jwtProperties. getUserSecretKey ( ) , jwtProperties. getUserTtl ( ) , claims) ;
UserLoginVO userLoginVO= new UserLoginVO ( ) . builder ( )
. id ( user. getId ( ) )
. openid ( user. getOpenid ( ) )
. token ( token)
. build ( ) ;
return Result . success ( userLoginVO) ;
使用微信接口服务,获取当前微信用户的openId
@Override
public User wxlogin ( UserLoginDTO userLoginDTO) {
Map < String , String > map= new HashMap < > ( ) ;
map. put ( "appid" , weChatProperties. getAppid ( ) ) ;
map. put ( "secret" , weChatProperties. getSecret ( ) ) ;
map. put ( "js_code" , userLoginDTO. getCode ( ) ) ;
map. put ( "grant_type" , "authorization_code" ) ;
String json= HttpClientUtil . doGet ( welogin, map) ;
JSONObject jsonObject = JSON . parseObject ( json) ;
String openid = jsonObject. getString ( "openid" ) ;
if ( openid== null ) {
throw new LoginFailedException ( MessageConstant . LOGIN_FAILED ) ;
}
User user = userMapper. gerByOpenid ( openid) ;
if ( user== null ) {
user= User . builder ( )
. openid ( openid)
. createTime ( LocalDateTime . now ( ) )
. build ( ) ;
userMapper. insert ( user) ;
}
return user;
}
创建拦截器并注册
@Component
@Slf4j
public class JwtTokenUserInterceptor implements HandlerInterceptor {
@Autowired
private JwtProperties jwtProperties;
public boolean preHandle ( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if ( ! ( handler instanceof HandlerMethod ) ) {
return true ;
}
String token = request. getHeader ( jwtProperties. getUserTokenName ( ) ) ;
try {
log. info ( "jwt校验:{}" , token) ;
Claims claims = JwtUtil . parseJWT ( jwtProperties. getUserSecretKey ( ) , token) ;
Long userId = Long . valueOf ( claims. get ( JwtClaimsConstant . USER_ID ) . toString ( ) ) ;
BaseContext . setCurrentId ( userId) ;
log. info ( "当前用户id:" , userId) ;
return true ;
} catch ( Exception ex) {
response. setStatus ( 401 ) ;
return false ;
}
}
}
protected void addInterceptors ( InterceptorRegistry registry) {
log. info ( "开始注册自定义拦截器..." ) ;
registry. addInterceptor ( jwtTokenAdminInterceptor)
. addPathPatterns ( "/admin/**" )
. excludePathPatterns ( "/admin/employee/login" ) ;
registry. addInterceptor ( jwtTokenUserInterceptor)
. addPathPatterns ( "/user/**" )
. excludePathPatterns ( "/user/user/login" )
. excludePathPatterns ( "/user/shop/status" ) ;
}