package com.mirson.spring.boot.security.oauth.config;
import com.mirson.spring.boot.security.oauth.po.OAuthUser;
import lombok.SneakyThrows;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.client.InMemoryClientDetailsService;
import org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;
import org.springframework.security.oauth2.provider.token.TokenEnhancerChain;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@Configuration
@EnableAuthorizationServer
@Log4j2
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
public static final String OAUTH_KEY_CLIENT_DETAILS = "boot:oauth:client:details";
/**
* 用户信息前缀
*/
public static final String OAUTH_KEY_USER_DETAILS = "boot:oauth:user_details";
/**
* oauth 相关前缀
*/
public static final String OAUTH_PREFIX_KEY = "boot:oauth:";
/**
* 客户端模式
*/
public static final String OAUTH_CLIENT_CREDENTIALS = "client_credentials";
/**
* 签名密钥
*/
public static final String OAUTH_SIGN_KEY = "sign_secret";
@Autowired
private UserDetailsService authCustomUserDetailService;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private RedisConnectionFactory redisConnectionFactory;
/**
* Redis 缓存配置
* @return
*/
@Bean
public RedisTemplate<String, Object> stockRedisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
/**
* 防止申请token时出现401错误
* @param oauthServer
*/
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
oauthServer
.tokenKeyAccess("permitAll()")
.checkTokenAccess("permitAll()")
.allowFormAuthenticationForClients();
}
@Override
public void configure(ClientDetailsServiceConfigurer clients)
throws Exception {
clients.inMemory()
.withClient("demo")
.secret("4QrcOUm6Wau+VuBX8g+IPg==")
.authorizedGrantTypes("password", "authorization_code");
}
/**
* 认证服务配置
* @param endpoints
*/
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
// 自定义token生成方式
TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer(), accessTokenConverter()));
endpoints
.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)
.tokenStore(redisTokenStore())
.tokenEnhancer(tokenEnhancerChain)
.userDetailsService(authCustomUserDetailService)
.authenticationManager(authenticationManager)
.reuseRefreshTokens(false);
}
/**
* TokenStore实现方式, 采用Redis缓存
* @return
*/
@Bean
public TokenStore tokenStore() {
RedisTokenStore tokenStore = new RedisTokenStore(redisConnectionFactory);
tokenStore.setPrefix(OAUTH_PREFIX_KEY);
tokenStore.setAuthenticationKeyGenerator(new DefaultAuthenticationKeyGenerator() {
@Override
public String extractKey(OAuth2Authentication authentication) {
return super.extractKey(authentication);
}
});
return tokenStore;
}
/**
* JWT TOKEN配置,采用签名密钥
*
*/
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey(OAUTH_SIGN_KEY);
return converter;
}
/**
* TokenStore实现方式, 采用Redis缓存
* @return
*/
@Bean
public TokenStore redisTokenStore() {
RedisTokenStore tokenStore = new RedisTokenStore(redisConnectionFactory);
tokenStore.setPrefix(OAUTH_PREFIX_KEY);
tokenStore.setAuthenticationKeyGenerator(new DefaultAuthenticationKeyGenerator() {
@Override
public String extractKey(OAuth2Authentication authentication) {
return super.extractKey(authentication);
}
});
return tokenStore;
}
/**
* token增强处理, 支持扩展信息
* @return TokenEnhancer
*/
@Bean
public TokenEnhancer tokenEnhancer() {
return (accessToken, authentication) -> {
try {
if (OAUTH_CLIENT_CREDENTIALS
.equals(authentication.getOAuth2Request().getGrantType())) {
return accessToken;
}
final Map<String, Object> additionalInfo = new HashMap<>(16);
OAuthUser authUser = (OAuthUser) authentication.getUserAuthentication().getPrincipal();
if (null != authUser) {
// 放入扩展信息
additionalInfo.put("oauth_user_id", authUser.getId());
additionalInfo.put("oauth_user_date", authUser.getCreateTime());
additionalInfo.put("active", true);
}
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
}catch(Exception e) {
log.error(e.getMessage(), e);
}
return accessToken;
};
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoot集成使用教程源码
共128个文件
java:82个
xml:21个
yml:17个
需积分: 50 10 下载量 194 浏览量
2022-08-14
09:29:44
上传
评论
收藏 189KB ZIP 举报
温馨提示
包含spring boot 监控、secruity与OAuth2鉴权、elasticSearch、Kafka、RabbitMQ、rocketMQ、MongoDB、Redis的集成使用案例,供大家在实际项目中做借鉴使用。
资源详情
资源评论
资源推荐
收起资源包目录
SpringBoot集成使用教程源码 (128个子文件)
TestMain.class 6KB
CustomerMatchCondition.class 1KB
StartupApplication.class 1KB
CusomterConditional.class 1KB
bootstrap.min.css 118KB
signin.css 979B
login.ftl 1KB
spring-boot-startup.iml 5KB
AuthorizationServerConfig.java 8KB
TestMain.java 7KB
EncryptUtil.java 6KB
RedisController.java 5KB
KafkaCommonConsumer.java 4KB
MongoReactiveServiceImpl.java 4KB
KafkaTransactionConsumer.java 3KB
RocketMqProviderContorller.java 3KB
MongoRepositoryServiceImpl.java 3KB
SpringSecurityConfiguration.java 3KB
MongoTemplateServiceImpl.java 3KB
UserController.java 3KB
RedisConfiguration.java 3KB
TransactionListener.java 3KB
MessageExtConsumer.java 2KB
RabbitDirectConfig.java 2KB
RabbitTopicConfig.java 2KB
ProviderController.java 2KB
RocketMqProviderContorller.java 2KB
AbstractController.java 2KB
RabbitFanoutConfig.java 2KB
WebSecurityConfiguration.java 2KB
SecuritySecureConfig.java 2KB
RabbitDirectSender.java 2KB
KafkaProviderController.java 2KB
SecuritySuccessHandler.java 2KB
SecurityFailureHandler.java 1KB
AuthCustomUserDetailService.java 1KB
AuthPasswordEncoder.java 1KB
UserRepository.java 1KB
KafkaProviderController.java 1KB
FanoutReceiver.java 1KB
TopicReceiver.java 1KB
OrderSpringMessageConsumer.java 1KB
StrSpringMessageConsumer.java 1KB
IPersonMongoDao.java 1KB
UserController.java 1015B
MongodbConfiguration.java 995B
Person.java 991B
IMongoService.java 990B
ActuatorApplication.java 936B
MongoTemplateController.java 934B
StringTransactionConsumer.java 916B
MongoRepositoryController.java 899B
ElasticSearchApplication.java 869B
StartupApplication.java 861B
StringConsumer.java 818B
CustomSystemEndPoint.java 811B
UserController.java 799B
MongoReactiveController.java 772B
NosqlMongodbApplication.java 769B
CustomAbstractHealthIndicator.java 769B
RabbitMqConfig.java 753B
ResourceServerConfiguration.java 743B
User.java 739B
RabbitMqConfig.java 715B
CustomHealthIndicator.java 712B
SecurityOauthApplication.java 712B
CustomerMatchCondition.java 706B
AdminServerNacosApplication.java 702B
CusomterConditional.java 679B
OAuthUser.java 669B
DirectReceiver.java 645B
SecurityIntegrateApplication.java 644B
KafkaTransactionApplication.java 643B
RocketMqBasicApplication.java 632B
RocketMqAclApplication.java 626B
NosqlRedisApplication.java 622B
AdminClientNacosApplication.java 615B
KafkaApplication.java 609B
User.java 608B
User.java 604B
AdminServerApplication.java 589B
DataMsg.java 533B
Order.java 532B
DataMsg.java 510B
AdminClientApplication.java 501B
RabbitMqApplication.java 497B
DataMsgSecond.java 490B
KafkaConfig.java 459B
KafkaConfig.java 442B
OAuthUser.java 373B
pom.xml 5KB
pom.xml 2KB
pom.xml 2KB
pom.xml 1KB
pom.xml 1KB
pom.xml 1KB
pom.xml 1KB
pom.xml 1KB
pom.xml 1KB
pom.xml 1KB
共 128 条
- 1
- 2
麦神-mirson
- 粉丝: 9899
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0