Spring Boot+Spring Security+Spring Social项目开发(五):微信开发、绑定与解绑、Session管理、退出登录

说在前面

博主最近会有很多项目跟大家一起分享,做完后会上传github上的,希望读友们能给博主提提意见哈哈

这个项目是第三方登录和安全方面的,关于后台与app和网站的登录连接操作的实战项目

github已经上传:https://github.com/13652493839/TiHom-Security

各位如果可以就给我star哈哈谢谢啦


Spring Boot+Spring Security+Spring Social项目开发(九):Spring Security授权表达式、重构配置方面的内容、数据库RBAC数据模型控制权限
Spring Boot+Spring Security+Spring Social项目开发(八):Spring Security 控制授权、源码解析
Spring Boot+Spring Security+Spring Social项目开发(七):使用JWT替换默认Token、JWT实现SSO单点登录
Spring Boot+Spring Security+Spring Social项目开发(六):开发APP认证框架、Spring Security OAuth核心源码、重构三种登录方式、重构社交登录
Spring Boot+Spring Security+Spring Social项目开发(四):使用Spring Social开发第三方登录、QQ登录开发
Spring Boot+Spring Security项目开发(三):实现短信验证码登录
Spring Boot+Spring Security项目开发(二):Spring Security、实现图形验证码功能、实现”记住我”功能
Spring Boot+Spring Security项目开发(一):RESTful API介绍


微信开发

开发流程

第一模块:微信API

1.Weixin接口,与QQ不同加入了一个accessToken参数

2.WeixinImpl接口实现类,继承AbstractOAuth2ApiBinding

  • URL_GET_USER_INFO:获取用户信息的url
  • 实现获取微信用户信息的方法
  • 重写getMessageConverters方法,因为默认注册的StringHttpMessageConverter字符集为ISO-8859-1,而微信返回的是UTF-8的

3.WeixinUserInfo微信用户信息类,上微信开放平台查看属性即可

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316518&token=&lang=zh_CN

第二模块:connect

1.微信的access_token信息与标准的OAuth2协议不同,微信在获取access_token时会同时返回openId,并没有单独的通过accessToken换取openId的服务所以这里继承了标准AccessGrant,添加了openId字段,作为对微信access_token信息的封装,所以定义了一个WeixinAccessGrant微信认证权限类

2.写WeixinOAuth2Template微信关于OAuth2协议的模板

这里就不说具体了,我的代码里面都解释的非常清楚

3.开发微信适配器WeixinAdapter实现接口ApiAdapter

4.开发微信的OAuth2流程处理器的提供器,供Spring Social的connect体系调用:WeixinServiceProvider

5.开发WeixinConnectionFactory继承OAuth2ConnectionFactory

第三模块:config

1.WeixinAutoConfiguration继承SocialAutoConfigurerAdapter,加上

@Configuration
@ConditionalOnProperty(prefix = "tihom.security.social.weixin",name = "app-id")

2.WeixinProperties继承Spring的SocialProperties,在浏览器的包下配置

3.application下配置

#wxd99431bbff8305a0
tihom.security.social.weixin.app-id =
#60f78681d063590a469f1b297feff3c4
tihom.security.social.weixin.app-secret =
tihom.security.social.weixin.providerId=weixin

4.去html界面加上跳转即可


绑定与解绑

所谓绑定就是从数据库里面删除数据

1.Spring Social只提供数据没有提供视图

2.绑定时先跳转connect/status,我们要自己写这个视图

3.在social下定义一个TiHomConnectionStatusView类继承AbstractView,类中对视图进行渲染,同时这是个组件,要加上@Component(“connect/status”)

4.扫码绑定时,会跳转到connected视图,但是Spring Social默认没有实现,所以需要我们自己去写一个TiHomConnectView类继承AbstractView

5.开发解除绑定,可以把解绑的视图与绑定的视图写在一起,做个if判断来返回不同的视图信息

Session管理

Session超时处理

  • 如何控制超时时间
    • 设置超时时间
  • 超时了以后如何处理
    • 那就跳转session失效界面

Session并发控制

  • a.新session把旧session踢下去,类似游戏中的挤下线
  • b.新session无法踢下旧session,已经登录了就不能再另外登录了

重构代码,把url做成可配置、把返回做成json和html均兼容

  • 将超时和并发处理各自抽成类进行处理
  • 定义抽象的会话策略AbstractSessionStrategy
  • TiHomExpiredSessionStrategy和TiHomInvalidSessionStrategy继承AbstractSessionStrategy并实现各自的处理接口
  • 把配置都配置到常量接口和自定义session配置类

集群Session管理

  • 引入spring session包,已经帮我们完成了session的问题,我们只需要配置采用的存储是什么和端口即可
  • 使用redis做存储,为什么用redis?
    • session访问频繁,存数据库的话在过滤器链进行过程中读取压力大
    • session有时效性,存数据库还要自己处理清理,redis可以设置超时清理

这里写图片描述

退出处理

  • 如何退出登录
    • 调用/logout服务,跳转到/authentication/require?logout上
  • Spring Security默认的退出处理逻辑
    • 使当前session失效
    • 清除与当前用户相关的remember-me记录
    • 清空当前的SecurityContext
    • 重定向到登录页
  • 与退出登录相关的配置
    • 自定义退出成功处理器TiHomLogoutSuccessHandler实现LogoutSuccessHandler接口,在onLogoutSuccess方法中实现自己的退出逻辑
    • 到BrowserSecurityConfig中的configure中配置

      .logout()
      .logoutUrl("/signOut")
      //.logoutSuccessUrl("/tihom-logout.html") //配了Handler就不能配Url,两者互斥
      .logoutSuccessHandler(logoutSuccessHandler) //退出成功的处理
      .deleteCookies("JSESSIONID") //自定义要删除的cookie
      .and()
    • demo中加demo-logout.html,到appication.properties中配置

      tihom.security.browser.signOutUrl=/demo-logout.html
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页