发布于 2017-05-08 10:22:47 | 218 次阅读 | 评论: 0 | 来源: 网友投递
YMP 轻量级JAVA开发框架
YMP(yMatePlatform)开发框架是一套轻量级的JAVA应用开发框架,开发初衷只是想按自己的编码习惯,尽量采用最简单的方式实现我需要的东西,达到简化工作任务、统一开发流程为目标,能够减轻一点点的工作压力,让开发变成快乐的事!
经过很长时间的准备,将项目中用到的一些比较实用的模块进行提取重构,释放出来与大家分享!
如果她对你有帮助,也希望不吝收藏、点赞!当然,请我们喝杯咖啡也是好滴嘛 :p!
更希望大家多多关注YMP开源项目,在不改变编码习惯的同时,以简单、直接的方式解决问题,还会带给你似曾相识的感觉,不妨试试看,也许你会对她说:“相见恨晚”!
期待与大家交流学习!
模块名称 | 描述 |
---|---|
YMP-OAuth-Connector | 第三方OAuth授权登录模块 |
YMP-OAuth | OAuth2授权服务模块 |
YMP-Captcha | 验证码模块 |
YMP-SSO | 单点登录模块 |
YMP-MailSender | 邮件发送服务模块 |
YMP-FileUploader | 文件上传及资源访问服务模块 |
YMP-WebProxy | 简单HTTP请求透传代理模块 |
第三方OAuth授权登录模块,目前已实现GitHub、Weibo、Baidu、Wechat、OSChina和QQ等;
示例说明:
# OAuth客户端ID, 必选项 ymp.configs.module.oauth.connector.github.client_id=<CLIENT_ID> # OAuth客户端密钥, 必选项 ymp.configs.module.oauth.connector.github.client_secret=<CLIENT_SECRET>
http://<你的域名>/oauth/connect/github
首先,你需要创建基于YMP框架的Web工程项目;(如何快速搭建工程?)
申请服务帐号,本例申请的是GitHub第三方授权(访问https://github.com/settings/developers进行申请):
在申请过程中需要填写redirect_uri地址, 请填写:http://<你的域名>/oauth/connect/github/redirect;
在Web工程中配置OAuth模块参数:
最后,在浏览器地址栏输入如下URL进行测试:
了解更多YMP-OAuth-Connector内容,请访问码云:http://git.oschina.net/suninformation/ymate-module-oauth-connector
OAuth2授权服务模块;
支持客户端模式grant_type=client_credentials;
支持授权码模式grant_type=authorization_code;
支持密码模式grant_type=password;
支持scope权限范围:snsapi_base和snsapi_userinfo;
支持令牌更新:grant_type=refresh_token;
支持令牌有效性验证;
支持拦截器限制接口请求的scope权限:
客户端授权拦截器:ClientAccessTokenCheckInterceptor.class
用户网页授权拦截器:SnsAccessTokenCheckInterceptor.class
示例代码:
通过拦截器限制接口请求scope的权限必须是snsapi_userinfo:
@RequestMapping("/sns/userinfo") @Before(SnsAccessTokenCheckInterceptor.class) @ContextParam(@ParamItem(key = IOAuth.Const.SCOPE, value = IOAuth.Scope.SNSAPI_USERINFO)) public IView userinfo(@RequestParam(IOAuth.Const.ACCESS_TOKEN) String accountToken, @RequestParam(IOAuth.Const.OPEN_ID) String openId) throws Exception { try { return View.jsonView(OAuth.get().getModuleCfg().getUserInfoAdapter().getUserInfo(OAuth.get().bindAccessResourceHelper(accountToken, openId).getOAuthClientUser().getUid())); } catch (Exception e) { OAuthResponse _response = __responseBadRequest(IOAuth.Const.INVALID_USER); return new HttpStatusView(_response.getResponseStatus(), false).writeBody(_response.getBody()); } }
客户端模式:
以POST方式请求URL地址:
http://localhost:8080/oauth2/token
POST请求报文:
POST /oauth2/token HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache client_id=default&client_secret=7890123&grant_type=client_credentials
授权码模式:
获取授权码,以GET方式请求URL地址,成功则重定向并携带code授权码:
http://localhost:8080/oauth2/sns/authorize?client_id=default&response_type=code&redirect_uri=http://localhost:8080/oauth2/sns/redirect&scope=snsapi_base&state=Helloworld
接收到code授权码后,获取access_token令牌,以POST方式请求URL地址:
http://localhost:8080/oauth2/sns/access_token
POST请求报文:
POST /oauth2/sns/access_token HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache code=f32ab01222936356e5a8352b9beeacc3&client_id=default&client_secret=7890123&grant_type=authorization_code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Foauth2%2Fsns%2Fredirect
密码模式:
以POST方式请求URL地址:
http://localhost:8080/oauth2/sns/access_token
POST请求报文:
POST /oauth2/sns/access_token HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache client_id=default&client_secret=7890123&grant_type=password&username=suninformation&password=8fa6adcdaa9e50635c5bf54eacfca83a&scope=snsapi_userinfo
令牌更新:
以POST方式请求URL地址:
http://localhost:8080/oauth2/sns/refresh_token
POST请求报文:
POST /oauth2/sns/refresh_token HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache grant_type=refresh_token&refresh_token=207f2a5de46198dc8b42ba175e75cac1&client_id=default&client_secret=7890123
令牌有效性验证:
以GET方式请求URL地址:
http://localhost:8080/oauth2/sns/auth?access_token=39ec0af0b9f5f7ebe2877389bb2919b4&open_id=6bf18fa2f9a136273fb90e58dff4a964
获取授权用户基本信息:
以GET方式请求URL地址:
http://localhost:8080/oauth2/sns/userinfo?access_token=8fec1e7eca5d6e18b48d33f1725f6082&open_id=6bf18fa2f9a136273fb90e58dff4a964
了解更多YMP-OAuth内容,请访问码云:https://git.oschina.net/suninformation/ymate-module-oauth
验证码模块;
支持图片、邮件和短信三种验证类型;
支持多作用域验证生成;
支持debug模式,该模式下短信不会被发送;
支持根据限定条件判断是否启用验证码,如:请求n次后需要填写验证码;
采用注解验证,配置简单、灵活,可自定义扩展;
示例代码:
验证码注解@VCaptcha的使用
@RequestMapping(value = "/login", method = Type.HttpMethod.POST) public IView __doLogin(@VCaptcha(invalid = true) @RequestParam String captcha, // 验证码 @VRequried @VMobile @RequestParam String mobile, // 手机号码 @VRequried @VCaptcha(tokenId = ICaptcha.Const.TOKEN_SMS) @RequestParam String smscode, // 短信验证码 @VRequried @RequestParam String passwd, // 登录密码 @RequestParam(Optional.REDIRECT_URL) String redirectUrl) throws Exception { // ...... 省略 return WebResult.SUCCESS().toJSON(); }
验证码相关方法调用
// 生成作用域为user.login的验证码 String _code = Captcha.get().generate("user.login"); // 销毁作用域为user.login的验证码 Captcha.get().invalidate("user.login"); // 判断是否开启错误记数,开启后将支持跳过参数验证 Captcha.get().isWrongTimesEnabled(); // 判断作用域为user.login的验证码是否允许忽略 Captcha.get().isValidationNeedSkip("user.login"); // 重置作用域为user.login的验证码错误计数器 Captcha.get().resetWrongTimes("user.login"); // 验证作用域为user.login的验证码是否匹配以及验证后是否使其失效 Captcha.get().validate("user.login", _code, true);
了解更多YMP-Captcha内容,请访问码云:http://git.oschina.net/suninformation/ymate-module-captcha
单点登录模块;
一个拦截器搞定单点登录;
支持Cookies、请求头或请求参数临时存储授权令牌;
支持服务端和客户端两种模式;
支持跨域身份验证;
支持通过Ajax调用RESTFul API接口的身份验证;
支持授权令牌加解密;
示例代码:
获取当前用户的登录授权令牌对象:
ISSOToken _token = SSO.get().currentToken();
使用单点登录拦截器:
@RequestMapping(value = "/user/profile/edit", method = Type.HttpMethod.POST) @Before(UserSessionCheckInterceptor.class) public IView __doEditUserProfile(@RequestParam String nickName, ......) throws Exception { // ...... 省略 return WebResult.SUCCESS().toJSON(); }
了解更多YMP-SSO内容,请访问码云:http://git.oschina.net/suninformation/ymate-module-sso
邮件发送服务模块,支持多帐号配置;
示例代码:
// 通过默认邮件服务发送: MailSender.get().create() .to("notify@demo.xxx") .cc("ceshi@demo.xxx") .bcc("someone@demo.xxx") .subject("帐户注册成功通知邮件") .send("恭喜你..."); // 通过指定的邮件服务发送: MailSender.get().create("demo") .to("boss@demo.xxx") .subject("匿名") .send("再不开响,服务器格式化啦!");
了解更多YMP-MailSender内容,请访问码云:http://git.oschina.net/suninformation/ymate-module-mailsender
文件上传及资源访问服务模块;
支持文件指纹匹配,秒传;
支持图片文件多种规则等比例压缩;
支持视频文件截图;
支持上传文件ContentType白名单过滤;
支持主从负载模式配置;
支持自定义响应报文内容(如:百度编辑器文件上传成功响应JSON报文结构);
支持自定义扩展文件存储策略;
支持跨域上传文件及用户身份验证;
示例代码:
上传文件,以POST方式请求URL地址:
http://localhost:8080/uploads/push
参数说明:
file: 上传文件流数据;
type: 指定请求结果处理器,若未提供则采用默认,可选值:fileuploadbaidu
文件指纹匹配,以POST方式请求URL地址:
http://localhost:8080/uploads/match
参数说明:
返回值:
{ret: 0, matched: true}
hash: 文件哈希值(MD5),必选参数;
文件资源访问,以GET方式请求URL地址:
http://localhost:8080/uploads/resources/{type}/{hash}
参数说明:
注:若需要强制浏览器下载资源,只需在请求参数中添加?attach即可;
type: 文件类型,必选参数,可选值:imagevideoaudiotextapplicationthumb
hash: 文件哈希值(MD5),必选参数;
了解更多YMP-FileUploader内容,请访问码云:http://git.oschina.net/suninformation/ymate-module-fileuploader
简单HTTP请求透传代理模块,用于将本地请求转发至远程服务器并返回远程服务的响应结果;
支持透传请求头黑、白名单过滤;
支持请求黑名单过滤;
支持响应头白名单过滤;
了解更多YMP-WebProxy内容,请访问码云:http://git.oschina.net/suninformation/ymate-module-webproxy
YMP不仅提供便捷的Web及其它Java项目的快速开发体验,也将不断提供更多丰富的项目实践经验。
了解更多有关YMP框架的内容,请访问官网:http://www.ymate.net/