springcloud + zuul + oauth2
认证服务器
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthServerConfig extends AuthorizationServerConfigurerAdapter{
@Autowired
public CustomWebResponseExceptionTranslator customWebResponseExceptionTranslator;
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private DataSource dataSource;
@Bean
public TokenStore tokenStore(){
return new JwtTokenStore(jwtTokenEnhancer());
}
@Bean
public JwtAccessTokenConverter jwtTokenEnhancer() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("weijie.key"),"weijie".toCharArray());
converter.setKeyPair(keyStoreKeyFactory.getKeyPair("weijie"));
return converter;
}
/**
* 用户合法性校验
* @param endpoints
* @throws Exception
*/
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.exceptionTranslator(customWebResponseExceptionTranslator)
.userDetailsService(userDetailsService)
.tokenStore(tokenStore())
.tokenEnhancer(jwtTokenEnhancer())
.authenticationManager(authenticationManager);
}
/**
* 配置客户端应用详细信息
* @param clients
* @throws Exception
*/
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.jdbc(dataSource);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.tokenKeyAccess("isAuthenticated()")
.checkTokenAccess("isAuthenticated()");
}
}
@Component
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private LoginUserMapper loginUserMapper;
//这就是构建用户所必需的的三个属性。用户名、密码、权限、
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
LoginUser loginUser = loginUserMapper.selectOne(new QueryWrapper<LoginUser>().eq("username",username));
return loginUser;
}
}
资源服务器
@GetMapping("role")
public Result getRoleMenus(@AuthenticationPrincipal String username){
List<Menu> menus = menuService.getRoleMenus(username);
return Result.success(menus);
}
为什么SecurityContextHolder.getContext().getAuthentication().getPrincipal();和@AuthenticationPrincipal 注解都只能获取当前用户的用户名? 怎么配置可以获取 用户ID等信息呢?