jwt扩展
1、新建扩展类
package com.ireciting.uaaservice.config; import com.ireciting.uaaservice.pojo.TUser; import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; import org.springframework.security.oauth2.common.OAuth2AccessToken; import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.token.TokenEnhancer; import java.util.HashMap; import java.util.Map; public class CustomTokenEnhancer implements TokenEnhancer { @Override public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { TUser user = (TUser) authentication.getPrincipal(); final Map<String, Object> additionalInfo = new HashMap<>(); additionalInfo.put("user_id", user.getUserId()); ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo); return accessToken; } }
2、资源服务器获取扩展信息
新建类转换类
package com.ireciting.noteservice.config; import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter; import org.springframework.stereotype.Component; import java.util.Map; /** * @author Lv * @version 1.0 * @Description: 定制 AccessToken 转换器,为添加额外信息在服务器端获取做准备 * @date 2019/6/21 18:51 */ @Component public class CustomAccessTokenConverter extends DefaultAccessTokenConverter { @Override public OAuth2Authentication extractAuthentication(Map<String, ?> claims) { OAuth2Authentication authentication = super.extractAuthentication(claims); authentication.setDetails(claims); return authentication; } }
遍历获取
/** * 获取UserID * @return */ public static long getCurrentUserID() { try { OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails(); Map<String, Object> map = (Map<String, Object>) details.getDecodedDetails(); for (String key : map.keySet()) { if (key.equals("user_id")) return (Long) map.get(key); } } catch (Exception e){ return -1L; } return -1L; }