1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

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

本帖由 漂亮的石头2017-05-08 发布。版面名称:软件资讯

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    487,979
    赞:
    47
    经过很长时间的准备,将项目中用到的一些比较实用的模块进行提取重构,释放出来与大家分享!

    如果她对你有帮助,也希望不吝收藏、点赞!当然,请我们喝杯咖啡也是好滴嘛 :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/
    YMP v2.0 模块项目集中发布!第一波!下载地址
     
正在加载...