# 基于Spring Security OAuth2的微信网页登录 **Repository Path**: oooh2016/JiYuSpring-Security-OAuth2DeWeiXinWangYeDengLu ## Basic Information - **Project Name**: 基于Spring Security OAuth2的微信网页登录 - **Description**: 基于Spring Security OAuth2的微信网页登录 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 14 - **Created**: 2017-11-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于Spring Security OAuth2的微信网页登录 研究spring Security有一段时间,放假无聊写了这个小project。 现在做项目,都需要用户认证、授权的,必需但又挺烦的一个功能。现在大家都玩微信,直接使用微信的账号登录就行了。结合Spring Security oauth2也挺容易实现的。 ### 根据微信的开发文档,微信网页登录是基于oauth2协议的,但做这个项目的时候,遇到一些不同的地方,如下: 1、oauth2协议中的client_id和client_secret,在微信中是appid与secret;
2、访问微信的api时,返回的数据是json,但content-type是text/plain,spring的默认的messageConverter是不会转换text/plain的数据为对象map,从而导致不能获取api的返回数据。我的解决方法,增加了一个MappingJackson2HttpMessageConverter,重写mediaTypes,使它处理text/plain的数据。
3、根据微信的api文档,重定向的url的最后,必需加@wechat_redirect,spring security oauth2的默认处理是没有的。但实际情况是,没有这个也是可以的,但考虑到我是用公众号的测试号开发的,可以正式环境需要,我改了。
4、微信网页授权的api的方法是Get,spring security oauth2是post,是改。 ### 本项目是根据spring的官方教程改写而成,不破坏原教程的情况下,只是重写了部分类的方法,从而实现上面的不同点。 原官方教程地址: https://spring.io/guides/tutorials/spring-boot-oauth2/ 设断点分析oauth2的整个流程,才知道上面那些不同点要在哪里改,非常痛苦。真不明白微信既然基于oauth2,但又弄这些不一样的地方是为啥。 此项目可以轻松移植到其它需要使用微信网页登录的项目,当然,前提你要熟悉spring security。 ### 要正常运行、测试本项目,你需要准备下面几项目东西: 1、微信公众号的测试号。
2、在测试号的管理界面上,设置回调域名,这里你随便设,测试用,不带http或https。
3、修改C:\Windows\System32\drivers\etc\hosts文件,增加一个静态路由,域名就是你刚才设置的域名,指向127.0.0.1,如www.abc.com 127.0.0.1,这样就可以本地测试第三方登录,其实其它的第三方登录如QQ、微博,都是这样,我是不建议使用软件实现,何必呢。
4、使用微信开发者工具,浏览测试。因为公众号的微信网页授权,只能在微信浏览器访问的,而微信开发者工具实则就是一个微信浏览器。
5、app微信登录、网页登录申请太麻烦了,要上传太多资料,我就用公众号测试的,基本原理都一样。
### Over! ### Good luck.