YMP v2.0 模块项目集中发布!第一波!

有理想的鱼
 有理想的鱼
发布于 2017年05月08日
收藏 56

经过很长时间的准备,将项目中用到的一些比较实用的模块进行提取重构,释放出来与大家分享!

如果她对你有帮助,也希望不吝收藏、点赞!当然,请我们喝杯咖啡也是好滴嘛 :p!

更希望大家多多关注YMP开源项目,在不改变编码习惯的同时,以简单、直接的方式解决问题,还会带给你似曾相识的感觉,不妨试试看,也许你会对她说:“相见恨晚”!

期待与大家交流学习!

第一波集中发布如下模块:

                模块名称                描述
YMP-OAuth-Connector                第三方OAuth授权登录模块
YMP-OAuth                OAuth2授权服务模块
YMP-Captcha                验证码模块
YMP-SSO                单点登录模块
YMP-MailSender                邮件发送服务模块
YMP-FileUploader                文件上传及资源访问服务模块
YMP-WebProxy                简单HTTP请求透传代理模块

YMP-OAuth-Connector:

第三方OAuth授权登录模块,目前已实现GitHub、Weibo、Baidu、Wechat、OSChina和QQ等;

示例说明:

  • 首先,你需要创建基于YMP框架的Web工程项目;(如何快速搭建工程?

  • 申请服务帐号,本例申请的是GitHub第三方授权(访问https://github.com/settings/developers进行申请):

  • 在申请过程中需要填写redirect_uri地址, 请填写:http://<你的域名>/oauth/connect/github/redirect;

  • 在Web工程中配置OAuth模块参数:

  • # OAuth客户端ID, 必选项
    ymp.configs.module.oauth.connector.github.client_id=<CLIENT_ID>
    
    # OAuth客户端密钥, 必选项
    ymp.configs.module.oauth.connector.github.client_secret=<CLIENT_SECRET>
  • 最后,在浏览器地址栏输入如下URL进行测试:

  • http://<你的域名>/oauth/connect/github

了解更多YMP-OAuth-Connector内容,请访问码云:http://git.oschina.net/suninformation/ymate-module-oauth-connector

YMP-OAuth:

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

YMP-Captcha:

验证码模块;

  • 支持图片、邮件和短信三种验证类型;

  • 支持多作用域验证生成;

  • 支持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

YMP-SSO:

单点登录模块;

  • 一个拦截器搞定单点登录;

  • 支持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

YMP-MailSender:

邮件发送服务模块,支持多帐号配置;

示例代码:

// 通过默认邮件服务发送:
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

YMP-FileUploader:

文件上传及资源访问服务模块;

  • 支持文件指纹匹配,秒传;

  • 支持图片文件多种规则等比例压缩;

  • 支持视频文件截图;

  • 支持上传文件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

YMP-WebProxy:

简单HTTP请求透传代理模块,用于将本地请求转发至远程服务器并返回远程服务的响应结果;

  • 支持透传请求头黑、白名单过滤;

  • 支持请求黑名单过滤;

  • 支持响应头白名单过滤;

了解更多YMP-WebProxy内容,请访问码云:http://git.oschina.net/suninformation/ymate-module-webproxy

One More Thing

YMP不仅提供便捷的Web及其它Java项目的快速开发体验,也将不断提供更多丰富的项目实践经验。

了解更多有关YMP框架的内容,请访问官网:http://www.ymate.net/ 

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:YMP v2.0 模块项目集中发布!第一波!
加载中

最新评论(3

无时或了
无时或了
hh
臭水沟
臭水沟
666
返回顶部
顶部