OAuth2客户端springsecurity5 - 神经病的缥缈之旅

OAuth2客户端springsecurity5

神经病的缥缈之旅

介绍

本意是想从小说角度介绍各种组件使用方式,如果大家不喜欢可以直接跳过文字内容中,粘贴代码就好了哈。

一个2B程序猿可以进入电脑中的虚幻世界能力并且拥有一个非常不靠谱的系统。。。,看他在虚幻世界叱咤风云,成就现在世界中霸道总裁。

沈静兵创世界

  • 早上沈静兵(绰号:神经病)正常上班,刚坐到位置上,秃头上司就来了,秃头上司对他说:小沈啊今天公司早上刚接到个项目
  • 需要用到什么单点登录系统,你知道不,沈静兵沉吟了下,这个我知道,但是我手头上很多工作没有处理完,公司最近新进了很多人
  • 你可以找他们处理下,秃头上司当时就翻脸了,我是你领导我让你干什么就干什么,不用你交我怎么分配工作,这个工作就交给你了
  • 说完转身离去,沈静兵看着离去的背影,心里暗叹,这个公司在这么下去就完犊子了,要不是这个公司的老总是以前资助过我,我怎么
  • 会在你这,哎看来我要想办法改变这个情况了,沈静兵想完后,想着先把他们的问题解决了吧,说着眼睛盯着屏幕,眼中精光一闪,
  • 进入到了计算机中的虚幻世界,在外面的人看沈静兵只是在做正常编码工作。
  • 进入到了虚幻世界的沈静兵想了想,嗯单点登录那就使用OAUHT2吧,随后在沈静兵脑中响起清脆的女声,宿主是要创建新世界吗?
  • 沈静兵听到后点头说是,然后女声再次响起,请宿主挑选新世界拥有的依赖,沈静兵直接挑选了两个依赖,女声响起新世界初始化工作完毕。
  • 请宿主继续,作为新世界创建奖励一次抽奖机会,沈静兵听完后惊讶道说:创建新世界会得到抽奖机会吗?女声响起看我心情,
  • 沈静兵无语。。。,女声响起是否现在抽奖,沈静兵抽奖,只见他眼前出现了一个抽奖圆盘,上面有5项分别是特等奖,一等奖,二等奖
  • 三等奖,纪念奖,沈静兵问,这些奖项对应的奖品是什么,女声回答说:保密,沈静兵内心问候了下系统的家人,沈静兵说:抽奖吧。
  • 只见光芒一闪指针在圆盘中开始旋转了起来,在旋转了10多圈后慢慢的停下,只见指针马上就要停特等奖上,沈静兵心想我的手气不错,
  • 第一次就抽中特等奖了,但是指针确停在了特等奖与纪念奖中间位置,系统声音响起,本次抽奖结果为纪念奖,沈静兵当时就不干了,
  • 这明明停到了中间凭什么算是纪念奖,系统淡定回答说,应为指针距离中线还差0.0001毫米,沈静兵说:你说差就差了啊,我怎么看不到
  • 系统说:放大,只见抽奖圆盘放大了N倍,肉眼可见指针离着中线就差了那么一点点,沈静兵相当无语,说好吧,那纪念奖奖品是什么。
  • 系统本次纪念奖奖品,Java编程思想书一本,已经通过快递邮寄给你了,请注意查收哦,听着这个俏皮的系统女声,沈静兵内心是崩溃的。
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-oauth2-client</artifactId>
       </dependency>

       <dependency>
           <groupId>org.thymeleaf.extras</groupId>
           <artifactId>thymeleaf-extras-springsecurity5</artifactId>
       </dependency>
  • 沈静兵创建好了基本世界结构,心想我需要一个看门的,不能让杂七杂八的啥人都往里进啊,于是乎沈静兵使用召唤技能。
  • 虚拟世界技能等级分为P1-P10,十个等级,主人公沈静兵只是P2级别小菜菜。
  • 沈静兵:出来吧我的伙伴,由于等级太低。。。竟然召唤出一只旺财。。。
  • 沈静兵看着召唤出来的旺财相当的无语,在看了看自己可怜的等级只能认了。
  • 于是看门狗旺财(SecurityConfig)闪亮登场,旺财看了看左右跟沈静兵说,你有毛病啊这啥都么有你让我来干啥啊。
  • 沈静兵说:我新创建了个世界,我让你来给我看门的,旺财说:让本旺就来干这事,你做梦啊,说着旺财就要从召唤传送门离开。
  • 沈静兵我擦,这TMD一只狗还拽上天了啊,我是召唤的你啊 ,你还不听我的,说着就要动手去抓,结果旺财回头就咬了他一口,
  • 说道:你现在等级太低没有不能直接使唤我,等你等级提高再说吧,除非,沈静兵说:除非什么,只见旺财搓着两只狗爪子说:
  • 要么帮我提升等级 ,要么给我好处,不过提升等级估计你做不到了,但是你可给我好处呀,沈静兵说:好处?什么好处?
  • 旺财说:你咋啥都不知道啊,我喜欢金币,很多很多的金币,旺财双眼放光的说,沈静兵:金币?大哥这是虚拟世界我拿来的金币
  • 给你啊,旺财撇撇嘴,你傻啊,我要的是虚拟货币懂不,沈静兵:我擦,我只是一个普通的程序猿你要的比特币我上那给你弄去,
  • 旺财:哎,你真是个小白,这个虚拟世界中虽然也有比特币的存在,但是那个不是通用货币,我这要的是通用的金币,就是程序与
  • 程序交互时候产生的金币啥的,沈静兵想了想,那我怎么去赚啊?,旺财说:这是你的事跟我有什么关系,说着转身要走,并说等你
  • 有钱了在来召唤我吧,我回去睡觉了,沈静兵急忙喊道:等等。旺财转头:干嘛?,沈静兵说:我有个办法可以让你赚到大量金币,
  • 旺财一听双眼一亮,说说看,沈静兵:我本来也是要召唤一个看门的,旺财不乐意说道:你才看门的,你全家都是看门的,沈静兵无语。
  • 好吧,卫士,安全卫士好吧,旺财一听才说:这才差不多,沈静兵说:我这需要建立一个关卡,这个关卡需要有人管理,进出都要管的,
  • 我感觉你特别适合这个位置,你不是说程序和程序交互就会产生金币吗?你要是在这个位置上,不管是进还是出都是可以收费的呀!
  • 旺财一听,双眼放光,你的意思可以双向收费啊,赶紧的给我赋予权限,这活我接了,沈静兵心想:还真TMD现实,沈静兵说:这个
  • 没问题,不过我也要金币,咱俩对半分,旺财一听,有点纠结说,这个我在这很辛苦的,对半有点不公平啊,沈静兵沉吟了下说:那这样
  • 既然是双向收费的,我只收入口费用,你收出口费用怎么样,收费标准你自己定,旺财听这么,收费标准我自己定,反正进来的都要出去的
  • 很划算呀,不过它还想再争取点,沈静兵说:你要觉得不合适的话你就走吧,我大不了在召唤一个,旺财一听急了,好吧好吧,就这么定了
  • 沈静兵心里偷笑,嘿嘿,谁说出去非要走你的关卡,你个傻狗,不过沈静兵表面上是没有什么表情的,对旺财说:来我给你授权,只见黑色
  • 光芒一闪,落在了旺财身上,旺财继承到了新技能(WebSecurityConfigurerAdapter),沈静兵说好了:权限给你了,我走了,旺财
  • 很不耐烦的挥挥爪子,走吧走吧,我要想想收费标准了,沈静兵。。。。
@Configuration
@Order(3)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.antMatcher("/**").authorizeRequests()
                .antMatchers("/").permitAll()
                .anyRequest().authenticated()
                .and()
                .logout() //提供注销的支持。这是在使用WebSecurityConfigurerAdapter时自动应用的。
                    .logoutUrl("/xx/logout") //触发注销发生的URL(默认为 /logout)。如果启用了CSRF保护(默认),那么请求也必须是POST。
                    //service= 退出后页面地址
                    .logoutSuccessUrl("http://localhost:9099/firebirds-plume/logout?service=http://127.0.0.1:10011/sanctr/talrashas-brace-template/v1/welcome") //注销后要重定向到的URL。默认是/login?logout。
                .and()
                .oauth2Login();
    }
}
  • 解决了旺财问题,沈静兵想了想,这个门的问题解决了,不过我这建立的是客户端的世界,还需要找到服务端要给服务啊,给这个世界
  • 搭配上基本的规则,心里召唤了下系统小姐姐,系统小姐小姐,我这怎么才能跟服务端建立连接呀,系统那清脆的女声响起,你需要去
  • 服务器世界填表,申请对接资格,(⊙o⊙)…,这么麻烦啊,沈静兵问,那我怎么去呢?系统说:我会给你开启传送门,说吧,在沈静兵
  • 身边出现了一个传送门,系统说进去后就可以直接到注册大厅,到时候找到工作人员填写表格就行了。沈静兵好奇的看着传送门,走了进去
  • 白光一闪就被传送到了一个大厅中,大厅中人还挺多的,有两个窗口,一个填表口,一个申请口,于是沈静兵老实的去填表口开始排队了,
  • 排队挺快的没一会就到他了,他对着窗口工作人员说:我来注册OAUHT2客户端的,工作人员面无表情,给我我一张表说,填好后去隔壁窗口申请
  • 拿到表后沈静兵按照上面的信息填写好后去,到了申请窗口,把表格交上去后,工作人员看了看后说:这个基本信息都可以了。
  • 一会我会给你个回执,上面会给你用户名密码,通过用户名密码你就能跟我们交易了,沈静兵疑惑的说:交易?,工作人员回答说:是的
  • 你每一次跟我交互都需要给我们服务端缴纳一个金币,沈静兵:。。。擦 这也要钱啊,工作人员淡定回答难道这个时间上还有免费的服务吗?
  • 还有请预存一部分款项,否则我们无法给你进行服务,沈静兵:我没钱,怎么办,工作人员说:那没有办法了说着就把申请单给递了出来,
  • 沈静兵!@#$%^,下一位工作人员喊道,沈静兵无奈的离开窗口,问系统小姐姐,我现在需要钱从那可以弄到钱呢,系统回答道你可以
  • 拿现实世界物品来兑换金币,兑换比例1=1000,也就是说1金币相当于现实世界1000RMB,沈静兵:我擦,咋这么贵呢,那个工作人员说
  • 每次连接1个金币呢,我穷屌丝一个拿来那么多钱啊,系统说:也可以拿现实物品来折算价值兑换金币,沈静兵:我一穷二白屌丝一个
  • 啥也么有啊,还没等沈静兵抱怨完,系统就给展示出了一个兑换列表,上面是所有可以进行兑换的物品,沈静兵看了后相当无语,这上面
  • 真就是属于他所有资产,笔记本电脑=2金币,台式电脑=1金币,衣服=0.5金币,行李箱=0.1金币,书籍=0.2金币,老家房产=2万金币,
  • Java编程思想=50金币,现金=1.1金币,沈静兵看完这个后泪流满面,我感觉我穷的一逼啊,不过那个JAVA编程思想为啥值那么多金币呢
  • 那个不也属于书籍吗?系统回答,系统出品必出精品。沈静兵。。。。那我把那个Java编程思想给兑换了吧,系统提示确认兑换?沈静兵
  • 确认,系统提示兑换成功,虚拟银行进账50金币,沈静兵看着银行中多出的50金币,跟系统说:这个金币可以兑换成现实世界的东西吗?
  • 系统回答可以,那我要在兑换那个Java编程思想需要多少金币呢,系统答:500金币,沈静兵:你你你也他黑了,系统这个是你自愿的
  • 沈静兵苦笑道:好吧,然后去了申请窗口,重新递上表格后跟工作人员说,我需要存入多少预存款呢,工作人员说:预存款最低50金币,
  • 沈静兵这么多啊,工作人员询问:是否预存,沈静兵摆摆手存吧存吧,话毕,虚拟银行的50金币直接被扣除,沈静兵看着消失的50金币,
  • 心想这个世界真TMD贵,扣钱扣的真TMD快啊,等我建立完我那个系统,我没事就多访问几次,多赚点钱要不啥都不是,这时候工作人员
  • 从窗口中递出一个文件,对沈静兵说:拿着这个回去初始化你的世界时候输入账号密码就可以了,获取CODE与TOKEN等内容是固定的再见
  • 沈静兵系统送我回去吧,随后传送门开启,沈静兵走入后回到了OAUTH2世界中,按照回执设定了了,OAUTH2世界初始化内容。
配置说明
spring:
  security:
    oauth2:
      client:
        registration:
          customa:
            #客户端ID
            client-id: 3716504419831808
            #客户端密码
            client-secret: 123456
            scope: read,write
            authorization-grant-type: authorization_code
            #重定向地址注意:/login/oauth2/code/ 为固定格式code后可自定义
            redirect-uri: http://127.0.0.1:10011/sanctr/talrashas-brace-template/v1/login/oauth2/code/welcome
        provider:
          customa:
            #获取CODE
            authorization-uri: http://localhost:9099/firebirds-plume/oauth2.0/authorize
            #获取TOKEN
            token-uri: http://localhost:9099/firebirds-plume/oauth2.0/accessToken
            #刷新TOKEN
            user-info-uri: http://localhost:9099/firebirds-plume/oauth2.0/profile
            user-name-attribute: id
  thymeleaf:
    cache: false
  • 沈静兵终于创建完这个世界了,我来用下看看,对了我没定价呢,我这个世界进入系统每次10金币,嘿嘿,突然系统提示响起对不起
  • 由于宿主创建的世界模块单一功能较少,系统被限定为每次进入最大上限10银币,当然随着宿主等级提高上限也可以进行重新划定,
  • 沈静兵相当之无语,弱弱的问了一句,那个1金币等于多少银币啊,系统答,1金币等于1000银币,沈静兵!@##¥¥,国骂之后无奈的
  • 说到那就10银币好了,系统回答设定完毕,沈静兵突然想到那只狗子出一次设定多少银币,系统回家旺财等级为P3级别,最大可设置
  • 100银币,沈静兵这区别对待也太大了吧。。。沈静兵无奈的只能试试新世界的功能了,这个新世界貌似CODE可以直接获得并且直接能
  • 取到TOKEN,这么强大。。。不错不错。先试试吧,沈静兵喊道启动世界,随后在一顿震动中,世界启动成功,沈静兵说来试试进入登录方法
  • 系统达到已登录成功,沈静兵看着虚拟银行中多了10银币感叹了句,钱真难赚呀,沈静兵刚想说要试试退出功能,结果想起来狗子那设定100银币
  • 退出一次,就弱弱的问了系统下,这个退出的钱由谁出,系统答你出。。。沈静兵拍拍胸脯还好我没退出嘿嘿,我就退出让狗子赚不到钱
  • 系统说:服务端已经设定自动退出时间你及时不退出也会在48小时内强制给你退出的,到时候你的银币还是会被扣除,沈静兵那我钱你怎么扣除
  • 系统说可以先扣掉,等你在赚取钱时候在从新赚的钱中扣除,沈静兵那我多登陆几次岂不是能很快赚钱,系统小姐姐这回很俏皮的说:退出
  • 系统是要钱的哦,沈静兵擦忘了,现实中沈静兵眼睛精光一闪已经回来了,伸展了下懒腰,看了下屏幕上的时间,虽然在虚拟世界中呆了那么长
  • 时间显示中其实刚过去1小时,这个OAUTH2随着系统世界建立完毕后,现实世界的代码也已经完成了,沈静兵心想这样写代码速度真不是盖的
  • 以后都不用加班咯,就在沈静兵还沉浸到沾沾自喜中,秃头经理走过来说:小沈啊,刚接到上面通知,那个单点登录先不用了,说完转身走了
  • 留下了一脸懵逼的沈静兵。
使用方法
  • 示例
      @Autowired
      private OAuth2AuthorizedClientService authorizedClientService;
          
      @GetMapping("/welcome")
      public ResultDTO welcome(OAuth2AuthenticationToken authentication){
      OAuth2AuthorizedClient authorizedClient =
              this.authorizedClientService.loadAuthorizedClient(
                      authentication.getAuthorizedClientRegistrationId(),
                      authentication.getName());
    
      OAuth2AccessToken accessToken = authorizedClient.getAccessToken();
      System.out.println("获取TOKEN----"+accessToken.getTokenValue());
      System.out.println("获取PrincipalName----"+authorizedClient.getPrincipalName());
      System.out.println("获取用户信息----"+authentication.getPrincipal());
      return new ResultDTO(ErrorCodeEnum.SUCCESS, "欢迎登录");
    
    }
  
- ##### 退出示例
```java
	@GetMapping("/xx/logout")
    public String logout(){

        System.out.println("logout---------------------已经注销");
        return "logout";
    }
  • 重定向获取CODE
	/**
     * @Description 重定向获取CODE
     * @Return ResultDTO
     * @Author 于洪波
     * @Date 2020/07/24
     */
     // /login/oauth2/code/ 为固定值code后可任意写
    @GetMapping(value="/login/oauth2/code/welcome", produces = "application/json;charset=utf-8")
    public ResultDTO welcome(Model model) {
        return new ResultDTO(ErrorCodeEnum.SUCCESS, "欢迎光临");
    }

资源下载:https://download.csdn.net/download/yuhongbo0/12741863

分享请标明出处,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值