专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

SpringCloud整合springsecurityoau

  设置通用父工程依赖
  在微服务构建中,我们一般用一个父工程来通知管理依赖的各种版本号信息。父工程pom文件如下:
  lt;?xmlversion1。0encodingUTF8?
  projectxmlnshttp:maven。apache。orgPOM4。0。0
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsd
  4。0。0
  com。zjq
  oauth2demoartifactId
  pom
  1。0SNAPSHOT
  commons
  msgateway
  msoauth2server
  msregistry
  modules
  2。3。7。RELEASE
  Hoxton。SR9
  1。18。16
  3。11
  2。1。3
  8。0。22
  2。1。5RELEASE
  5。4。7
  20。0
  maven。compiler。source1。8maven。compiler。source
  maven。compiler。target1。8maven。compiler。target
  project。build。sourceEncodingUTF8project。build。sourceEncoding
  properties
  org。springframework。boot
  springbootdependenciesartifactId
  {springbootversion}
  pom
  import
  dependency
  org。springframework。cloud
  springclouddependenciesartifactId
  {springcloudversion}
  pom
  import
  dependency
  org。projectlombok
  lombokartifactId
  {lombokversion}
  dependency
  org。apache。commons
  commonslang3artifactId
  {commonslangversion}
  dependency
  org。mybatis。spring。boot
  mybatisspringbootstarterartifactId
  {mybatisstarterversion}
  dependency
  com。battcn
  swaggerspringbootstarterartifactId
  {swaggerstarterversion}
  dependency
  mysql
  mysqlconnectorjavaartifactId
  {mysqlversion}
  dependency
  cn。hutool
  hutoolallartifactId
  {hutoolversion}
  dependency
  com。google。guava
  guavaartifactId
  {guavaversion}
  dependency
  dependencies
  dependencyManagement
  org。springframework。boot
  springbootmavenpluginartifactId
  plugin
  plugins
  pluginManagement
  build
  project
  构建eureka注册中心
  在SpringCloud微服务体系中服务注册中心是一个必要的存在,通过注册中心提供服务的注册和发现。具体细节可以查看我之前的博客,这里不再赘述。我们开始构建一个eureka注册中心,对应的yml配置文件如下:
  server:
  port:8080
  spring:
  application:
  应用名称
  name:msregistry
  配置EurekaServer注册中心
  eureka:
  client:
  registerwitheureka:false
  fetchregistry:false
  serviceurl:
  defaultZone:http:localhost:8080eureka
  logging:
  pattern:
  console:d{HH:mm:ss}〔thread〕5levellogger{50}msgn
  对应的项目启动类代码如下:
  packagecom。zjq。msregistry;
  importorg。springframework。boot。SpringApplication;
  importorg。springframework。boot。autoconfigure。SpringBootApplication;
  importorg。springframework。cloud。netflix。eureka。server。EnableEurekaServer;
  注册中心
  authorzjq
  启动eureka注册中心服务端相关组件
  EnableEurekaServer
  SpringBootApplication
  publicclassMsRegistryApplication{
  publicstaticvoidmain(String〔〕args){
  SpringApplication。run(MsRegistryApplication。class,args);
  }
  }
  至此,一个单体的服务注册中心搭建完成。
  构建认证授权服务
  上文我们已经完成了注册中心的搭建,接下来我们开始搭建认证授权中心。
  配置文件设置
  我们同样在父工程下面新建一个子工程,作为认证授权中心的微服务。对应的yml文件和pom文件配置如下:
  application。yml
  server:
  port:8082端口
  spring:
  application:
  name:msoauth2server应用名
  数据库
  datasource:
  driverclassname:com。mysql。cj。jdbc。Driver
  username:root
  password:123456
  url:jdbc:mysql:127。0。0。1:3306oauth2?serverTimezoneAsiaShanghaicharacterEncodingutf8useUnicodetrueuseSSLfalse
  Redis
  redis:
  port:6379
  host:localhost
  timeout:3000
  database:1
  password:123456
  swagger
  swagger:
  basepackage:com。zjq。oauth2
  title:认证服务API接口文档
  Oauth2
  client:
  oauth2:
  clientid:appId客户端标识ID
  secret:123456客户端安全码
  授权类型
  granttypes:
  password
  refreshtoken
  token有效时间,单位秒
  tokenvaliditytime:3600
  refreshtokenvaliditytime:3600
  客户端访问范围
  scopes:
  api
  all
  配置EurekaServer注册中心
  eureka:
  instance:
  preferipaddress:true
  instanceid:{spring。cloud。client。ipaddress}:{server。port}
  client:
  serviceurl:
  defaultZone:http:localhost:8080eureka
  Mybatis
  mybatis:
  configuration:
  mapunderscoretocamelcase:true开启驼峰映射
  指标监控健康检查
  management:
  endpoints:
  web:
  exposure:
  include:暴露的端点
  logging:
  pattern:
  pom。xml
  lt;?xmlversion1。0encodingUTF8?
  projectxmlnshttp:maven。apache。orgPOM4。0。0
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsd
  oauth2demoartifactId
  com。zjq
  1。0SNAPSHOT
  parent
  4。0。0
  msoauth2serverartifactId
  org。springframework。cloud
  springcloudstarternetflixeurekaclientartifactId
  dependency
  org。springframework。boot
  springbootstarterwebartifactId
  dependency
  org。springframework。boot
  springbootstarterdataredisartifactId
  dependency
  org。mybatis。spring。boot
  mybatisspringbootstarterartifactId
  dependency
  mysql
  mysqlconnectorjavaartifactId
  dependency
  org。springframework。cloud
  springcloudstartersecurityartifactId
  dependency
  org。springframework。cloud
  springcloudstarteroauth2artifactId
  dependency
  com。zjq
  commonsartifactId
  1。0SNAPSHOT
  dependency
  org。springframework。boot
  springbootconfigurationprocessorartifactId
  true
  dependency
  dependencies
  project
  Security配置类
  我们开始搭建SpringSecurity相关的配置类,具体配置类代码如下:
  packagecom。zjq。oauth2。server。config;
  importcn。hutool。crypto。digest。DigestUtil;
  importorg。springframework。context。annotation。Bean;
  importorg。springframework。context。annotation。Configuration;
  importorg。springframework。data。redis。connection。RedisConnectionFactory;
  importorg。springframework。security。authentication。AuthenticationManager;
  importorg。springframework。security。config。annotation。web。builders。HttpSecurity;
  importorg。springframework。security。config。annotation。web。configuration。EnableWebSecurity;
  importorg。springframework。security。config。annotation。web。configuration。WebSecurityConfigurerAdapter;
  importorg。springframework。security。crypto。password。PasswordEncoder;
  importorg。springframework。security。oauth2。provider。token。store。redis。RedisTokenStore;
  importjavax。annotation。Resource;
  Security配置类
  authorzjq
  Configuration
  EnableWebSecurity
  publicclassSecurityConfigurationextendsWebSecurityConfigurerAdapter{
  注入Redis连接工厂
  Resource
  privateRedisConnectionFactoryredisConnectionFactory;
  初始化RedisTokenStore用于将token存储至Redis
  return
  Bean
  publicRedisTokenStoreredisTokenStore(){
  RedisTokenStoreredisTokenStorenewRedisTokenStore(redisConnectionFactory);
  redisTokenStore。setPrefix(TOKEN:);设置key的层级前缀,方便查询
  returnredisTokenStore;
  }
  初始化密码编码器,用MD5加密密码
  Bean
  publicPasswordEncoderpasswordEncoder(){
  returnnewPasswordEncoder(){
  加密
  paramrawPassword原始密码
  return
  Override
  publicStringencode(CharSequencerawPassword){
  returnDigestUtil。md5Hex(rawPassword。toString());
  }
  校验密码
  paramrawPassword原始密码
  paramencodedPassword加密密码
  return
  Override
  publicbooleanmatches(CharSequencerawPassword,StringencodedPassword){
  returnDigestUtil。md5Hex(rawPassword。toString())。equals(encodedPassword);
  }
  };
  }
  初始化认证管理对象
  Bean
  Override
  publicAuthenticationManagerauthenticationManagerBean()throwsException{
  returnsuper。authenticationManagerBean();
  }
  放行和认证规则
  Override
  protectedvoidconfigure(HttpSecurityhttp)throwsException{
  http。csrf()。disable()
  。authorizeRequests()
  放行的请求
  。antMatchers(oauth,actuator)。permitAll()
  。and()
  。authorizeRequests()
  其他请求必须认证才能访问
  。anyRequest()。authenticated();
  }
  }
  Security配置类主要完成以下配置:
  注入Redis连接工厂
  初始化RedisTokenStore用于将token存储至Redis
  初始化密码编码器,用MD5加密密码
  初始化认证管理对象
  设置放行和认证规则
  授权服务配置类
  配置完了security配置类后,我们开始编写授权服务配置类,授权服务配置类需要继承AuthorizationServerConfigurerAdapter并重写对应的方法,tips:idea子类重写父类快捷键是CtrlO,重写后的授权服务配置类如下:
  packagecom。zjq。oauth2。server。config;
  importcom。zjq。commons。model。domain。SignInIdentity;
  importcom。zjq。oauth2。server。service。UserService;
  importorg。springframework。context。annotation。Configuration;
  importorg。springframework。security。authentication。AuthenticationManager;
  importorg。springframework。security。crypto。password。PasswordEncoder;
  importorg。springframework。security。oauth2。common。DefaultOAuth2AccessToken;
  importorg。springframework。security。oauth2。config。annotation。configurers。ClientDetailsServiceConfigurer;
  importorg。springframework。security。oauth2。config。annotation。web。configuration。AuthorizationServerConfigurerAdapter;
  importorg。springframework。security。oauth2。config。annotation。web。configuration。EnableAuthorizationServer;
  importorg。springframework。security。oauth2。config。annotation。web。configurers。AuthorizationServerEndpointsConfigurer;
  importorg。springframework。security。oauth2。config。annotation。web。configurers。AuthorizationServerSecurityConfigurer;
  importorg。springframework。security。oauth2。provider。token。store。redis。RedisTokenStore;
  importjavax。annotation。Resource;
  importjava。util。LinkedHashMap;
  授权服务配置类
  authorzjq
  Configuration
  EnableAuthorizationServer
  publicclassAuthorizationServerConfigurationextendsAuthorizationServerConfigurerAdapter{
  RedisTokenSore
  Resource
  privateRedisTokenStoreredisTokenStore;
  认证管理对象
  Resource
  privateAuthenticationManagerauthenticationManager;
  密码编码器
  Resource
  privatePasswordEncoderpasswordEncoder;
  客户端配置类
  Resource
  privateClientOAuth2DataConfigurationclientOAuth2DataConfiguration;
  登录校验
  Resource
  privateUserServiceuserService;
  配置令牌端点安全约束
  paramsecurity
  throwsException
  Override
  publicvoidconfigure(AuthorizationServerSecurityConfigurersecurity)throwsException{
  允许访问token的公钥,默认oauthtokenkey是受保护的
  security。tokenKeyAccess(permitAll())
  允许检查token的状态,默认oauthchecktoken是受保护的
  。checkTokenAccess(permitAll());
  }
  客户端配置授权模型
  paramclients
  throwsException
  Override
  publicvoidconfigure(ClientDetailsServiceConfigurerclients)throwsException{
  clients。inMemory()。withClient(clientOAuth2DataConfiguration。getClientId())客户端标识ID
  。secret(passwordEncoder。encode(clientOAuth2DataConfiguration。getSecret()))客户端安全码
  。authorizedGrantTypes(clientOAuth2DataConfiguration。getGrantTypes())授权类型
  。accessTokenValiditySeconds(clientOAuth2DataConfiguration。getTokenValidityTime())token有效期
  。refreshTokenValiditySeconds(clientOAuth2DataConfiguration。getRefreshTokenValidityTime())刷新token的有效期
  。scopes(clientOAuth2DataConfiguration。getScopes());客户端访问范围
  }
  配置授权以及令牌的访问端点和令牌服务
  paramendpoints
  throwsException
  Override
  publicvoidconfigure(AuthorizationServerEndpointsConfigurerendpoints)throwsException{
  认证器
  endpoints。authenticationManager(authenticationManager)
  具体登录的方法
  。userDetailsService(userService)
  token存储的方式:Redis
  。tokenStore(redisTokenStore);
  }
  }
  上面用到的客户端配置类如下:
  packagecom。zjq。oauth2。server。config;
  importlombok。Data;
  importorg。springframework。boot。context。properties。ConfigurationProperties;
  importorg。springframework。stereotype。Component;
  客户端配置类
  authorzjq
  Component
  ConfigurationProperties(prefixclient。oauth2)
  Data
  publicclassClientOAuth2DataConfiguration{
  客户端标识ID
  privateStringclientId;
  客户端安全码
  privateStringsecret;
  授权类型
  privateString〔〕grantTypes;
  token有效期
  privateinttokenValidityTime;
  refreshtoken有效期
  privateintrefreshTokenValidityTime;
  客户端访问范围
  privateString〔〕scopes;
  }
  具体登录的方法实现:
  登录实现
  packagecom。zjq。oauth2。server。service;
  importcom。zjq。commons。model。domain。SignInIdentity;
  importcom。zjq。commons。model。pojo。Users;
  importcom。zjq。commons。utils。AssertUtil;
  importcom。zjq。oauth2。server。mapper。UsersMapper;
  importorg。springframework。beans。BeanUtils;
  importorg。springframework。security。core。userdetails。UserDetails;
  importorg。springframework。security。core。userdetails。UserDetailsService;
  importorg。springframework。security。core。userdetails。UsernameNotFoundException;
  importorg。springframework。stereotype。Service;
  importjavax。annotation。Resource;
  登录校验
  authorzjq
  Service
  publicclassUserServiceimplementsUserDetailsService{
  Resource
  privateUsersMapperusersMapper;
  Override
  publicUserDetailsloadUserByUsername(Stringusername)throwsUsernameNotFoundException{
  AssertUtil。isNotEmpty(username,请输入用户名);
  UsersusersusersMapper。selectByAccountInfo(username);
  if(usersnull){
  thrownewUsernameNotFoundException(用户名或密码错误,请重新输入);
  }
  初始化登录认证对象
  SignInIdentitysignInIdentitynewSignInIdentity();
  拷贝属性
  BeanUtils。copyProperties(users,signInIdentity);
  returnsignInIdentity;
  }
  }
  UsersMapper:
  packagecom。zjq。oauth2。server。mapper;
  importcom。zjq。commons。model。pojo。Users;
  importorg。apache。ibatis。annotations。Param;
  importorg。apache。ibatis。annotations。Select;
  用户Mapper
  authorzjq
  publicinterfaceUsersMapper{
  根据用户名or手机号or邮箱查询用户信息
  paramaccount
  return
  Select(selectid,username,nickname,phone,email,
  password,avatarurl,roles,isvalidfromtuserswhere
  (username{account}orphone{account}oremail{account}))
  UsersselectByAccountInfo(Param(account)Stringaccount);
  }
  用户实体:
  packagecom。zjq。commons。model。pojo;
  importcom。zjq。commons。model。base。BaseModel;
  importlombok。Getter;
  importlombok。Setter;
  用户实体类
  Authorzjq
  Date20221012
  Getter
  Setter
  publicclassUsersextendsBaseModel{
  主键
  privateIntegerid;
  用户名
  privateStringusername;
  昵称
  privateStringnickname;
  密码
  privateStringpassword;
  手机号
  privateStringphone;
  邮箱
  privateStringemail;
  头像
  privateStringavatarUrl;
  角色
  privateStringroles;
  }
  packagecom。zjq。commons。model。base;
  importlombok。Getter;
  importlombok。Setter;
  importjava。io。Serializable;
  importjava。util。Date;
  实体对象公共属性
  Authorzjq
  Date20221012
  Getter
  Setter
  publicclassBaseModelimplementsSerializable{
  privateIntegerid;
  privateDatecreateDate;
  privateDateupdateDate;
  privateintisValid;
  }
  到此,我们完成了认证授权服务构建,接下来我们进行测试验证:
  测试验证
  我们启动注册中心和认证授权微服务。访问注册中心:http:localhost:8080
  可以看到认证授权服务已经注册到注册中心。
  接下来我们通过postman访问请求token测试:
  接下来我们通过postman访问请求token测试:
  Authorization请求头中配置,username和password,对应oauth客户端中的配置:
  在body中配置请求参数,发起请求后返回如下:
  在Redis中我们也可以看到生成的相关token配置:
  至此,我们完成了认证授权中心的初步搭建。
  版权声明:本文为CSDN博主共饮一杯无
  原文链接:https:blog。csdn。netqq35427589articledetails127340635

设立中共党史党建一级学科意义重大光明论坛国务院学位委员会教育部近日印发研究生教育学科专业目录(2022年),对学科门类一级学科与专业学位类别进行调整与补充,中共党史党建学以一级学科列入,引人瞩目。在前期征求意见的华为Mate50首销四百万部,这个数据真实吗?4G真的干翻5G了吗?自从9月21日上午华为Mate50系列开售以来,不管是线上还是线下,均被抢购一空,让我们再一次见识到了曾经Mate40系列才有的盛况。目前,华为已经紧急增产Mate50系列,持续向今日油价消息9月27日国内9295号汽油0号柴油价格油价大跌今天是2022年9月27日星期二,第18轮油价调整周期,统计第四个工作日参考原油变化率为3。35,预计汽油和柴油平均下调145元吨,折算0。110。12元升,下一轮油价调整时间为2总价值超5亿人民币!第五届进博会首票入境展品今日顺利通关9月20日,由香港起飞运抵上海浦东国际机场的25件珍稀珠宝艺术作品在上海会展中心海关顺利完成通关。这是艺术家陈世英(WallaceChan)首度参展进博会带来的展品,总价值约5。6澳洲央行发布白皮书开展央行数字货币试点项目(图澳洲央行官网)澳洲网编译报道澳洲央行(RBA)26日发布澳洲CBDC数字金融创新试点白皮书,概述澳洲央行数字货币(CBDC)eAUD开展试点项目计划。澳洲央行称,此次试点的目标鼎盛金师9。28今日黄金走势分析,金价低位震荡,待关键点位突破9。28黄金早盘分析黄金也开始震荡了,但看前天收盘昨天应该有新低的。但是早间直接拉升,最高也到了1642一线,晚间也没有跌下去,所以最近几天可能又是以震荡为主。日线昨天收十字阳线,云南男子徒步至四川离家十五年抖音发布视频两日内寻回家现在抖音一发,大家都能看到!魏女士欣喜地说。9月26日,这原本再寻常不过的一天,因一条抖音寻人视频的闯入,带来了这场十五年之久的团聚。正月初四的不告而别卫勤本是一个本本分分的正常人2022南宁欢乐消费季乐购南宁系列活动今日启动南宁云南宁日报讯(记者胡光磊)记者昨日从市商务局获悉,2022南宁欢乐消费季乐购南宁系列活动于9月27日启动,即日起至12月底派发消费券抽奖券等多种福利礼包,为市民提供乐购乐游乐居国庆给老婆买一款颜值高的手机今年的国家假日马上就要快到了,我想给老婆买款颜值天花板的智能手机,这款华为(HUAWEI)P50Pocket就非常不错,性价比也非常高!该手机屏幕是6。9英寸的超大OLED屏幕,画科幻题材不以炫目取胜偶然的必然事件展望与人工智能共同生活的日常繁星戏剧村年中大戏偶然的必然事件近日首演。该剧聚焦于人类如何面对科技所带来的改变这一话题,以平和的视角展现了数十年后人类与人工智能共同生活的日常,在白描的语境下展现出了人物间的错综双刷超强擦地力自洁烘干全标配石头智能洗地机A10Plus评测随着科学技术的发展,近年来出现了多种类型的家用清洁器具,从最初的扫把拖把到现如今的吸尘器扫地机器人,这些清理工具的智能化,能够在一定程度上加快我们做家务的效率,减轻清扫过程中的疲劳
我,俄罗斯人,热爱中国文化,嫁给中国帅小伙,想一辈子留在中国这是我们讲述的第476位真人的故事我是玛丽亚俄罗斯媳妇玛利亚一家,今年30岁,俄罗斯人,出生于乌克兰。身高166cm,来中国4年了,嫁给了河南农村小伙小马哥,成了中国媳妇,从此过上出售78台光刻机,美国却放任不管,外媒ASML立场正在转变光刻机是国产芯片最大的短板,ASML公司是全球光刻机龙头企业,受美国制约的ASML公司近期的种种行为出乎所有人的意料。是ASML公司主动争取的结果,还是美国默许下的别有用心?ASM永兴医生拒收患者红包,礼金转住院金红网时刻新闻6月16日讯(通讯员陈保文邝小梅)治病救人是我们的本职,只要患者能够得到及时救治早日康复,对我们来说就是最好的回赠。近日,永兴县中医医院疼痛科主任黄文军说。今年4月30美军自曝F连日以来,美国对中国的挑衅不仅没有因为中方发出不惜一战警告而有所收敛,反而更加频繁。尤其是香格里拉对话会结束后,美国频繁派军机对华实施抵近侦察,甚至两次突破我国东海防空识别区,高调梅德韦杰夫讽刺拜登是乔爷爷谁知道2年后还有没有乌克兰据参考消息网6月15日报道,乌克兰提议与美国签署能源领域租借协议,先从美国进口液化天然气,然后延期两年付款。对此,俄安全会议副主席梅德韦杰夫15日表示,我有个疑问,谁知道两年后乌克1992年河北发现武大郎墓,考古学家打开棺材后,揭开800多年骗局在中国几千年的历史长河中,人才辈出,众多文人雅士留下了脍炙人口的作品,其中自然也包括了中国四大名著之一的水浒传。熟悉水浒传的朋友们肯定都知道梁山108将,但其实还有一个人物肯定让大2008年汶川地震,哺乳9个婴儿的警察妈妈,后来怎么样了?2008年5月12日下午,四川汶川爆发了前所未有的大地震,地震使得汶川沦为了一片废墟,在废墟之上那是尸横遍野,哭声不止,惨叫不断,恍若人间炼狱。遇难者,失踪者不计其数,恐惧笼罩在汶赌王和二太先后离世,被棒打鸳鸯的何超琼上热搜,豪门绝恋美强惨赌王何鸿燊在2020年5月26日去世,享年98岁。两年后的6月11日,最被赌王倚重的二太79岁的蓝琼缨癌症医治无效,追随赌王而去。蓝琼缨和赌王原配黎婉华三太陈婉珍四太梁安琪的宅斗故警惕认知作战!无形炮火射向人心最柔软之处,要建立坚固防线文邱立本现代战争最厉害的武器不是导弹战机,而是瞄准人心深处的认知作战,如何善用最新的人工智能大数据等手段,在争夺人心的战场上抢占制高点,成为美国军工业的最新秘密。最新的武器其实也是两岸统合取代两岸统一?吕秀莲白日做梦,国台办强硬回应这段时间涉台问题频繁出现在人们视野当中,大陆也对此进行了强硬发声,首先是魏凤和防长的不惜一战警告,之后杨洁篪也在与沙利文的对话当中,严厉警告美方放弃在台海问题上的一切幻想,必须谨言河南储户变红码让人想起马云的好支付宝是能和银行竞争的鲶鱼银行沙丁鱼作为一种味道鲜美的深海鱼类受到很多人的喜爱,而渔民在捕捞沙丁鱼的时候会做出一个奇怪的选择在捕捞上来的沙丁鱼的鱼槽中往往会放上几只沙丁鱼的天敌鲶鱼。新鲜的沙丁鱼价格本来就很
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网