java - 用java制作Jhipster REST客户端

标签 java rest client jhipster http-status-code-401

我想让客户端对 jhipster 生成的 Web 应用程序进行 REST 调用。 我似乎错过了一些信息来做到这一点。

我发现在 application.yml 中我需要启用 cors 选项。 所以我取消了以下注释:

jhipster:
cors: #By default CORS are not enabled. Uncomment to enable.
    allowed-origins: "*"
    allowed-methods: GET, PUT, POST, DELETE, OPTIONS
    allowed-headers: "*"
    exposed-headers:
    allow-credentials: true
    max-age: 1800

这应该使 REST 调用成为可能。

我想我也需要启用此功能,但我不确定:

security:
basic:
    enabled: true

我希望我可以调用这样的电话:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
....
Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter("admin", "admin"));
WebResource webResource = client.resource("http://localhost:8080/api/example");

但是我收到了 401。那我是不是错过了什么?

这里是我的 .yo-rc.json 文件:

{
"generator-jhipster": {
"jhipsterVersion": "3.0.0",
"baseName": "tinybotsWeb",
"packageName": "nl.tinybots.web",
"packageFolder": "nl/tinybots/web",
"serverPort": "8080",
"authenticationType": "session",
"hibernateCache": "ehcache",
"clusteredHttpSession": "no",
"websocket": "no",
"databaseType": "sql",
"devDatabaseType": "mysql",
"prodDatabaseType": "mysql",
"searchEngine": "elasticsearch",
"buildTool": "maven",
"enableSocialSignIn": true,
"rememberMeKey": "6799bca03613c99e29cd3c1bb7ac878157250d87",
"useSass": false,
"applicationType": "monolith",
"testFrameworks": [
  "gatling",
  "cucumber",
  "protractor"
],
"enableTranslation": true,
"nativeLanguage": "nl",
"languages": [
  "nl",
  "en",
  "de"
  ]
 }
}

我将以下内容添加到 SecuryConfiguration:

    http
        .csrf()
        .ignoringAntMatchers("/basicAuthApi/**")
...
    .and()
        .authorizeRequests()
        .antMatchers("/basicAuthApi/**")
        .hasAuthority(AuthoritiesConstants.BASIC_AUTH).and().httpBasic()
...

现在我可以提出请求了。

我现在的问题是: 我应该怎么做? 这安全吗? 这是在做什么?:

security:
  basic:
    enabled: true

最佳答案

这里总结了我如何在我的案例中实现该解决方案,我认为这是相似的。这是真正的 swift 代码,但请将其视为伪代码,因为它可能不正确。请注意,这是此处发布的解决方案的副本:Jhipster + REST client + authentication

  1. 调用您需要调用的任何方法,并在该方法中传递成功时的回调( block 或等效内容)和失败时的回调( block 或等效项)

    func action(
        URLString:String,
        method:Method,
        encoding:Encoding = .JSON,
        parameters:[String : AnyObject]?,
        success:(statusCode:Int, responseObject:AnyObject)->Void,
        failure:(statusCode:Int, error:NSError)->Void
    )
    
  2. 在方法 es 内。 /events 您处理特定的失败情况,即状态代码为 401 时。

     if(r!.statusCode==ResponseCodes.HTTP_UNAUTHORIZED.rawValue){
    
         loginAndAction(URLString, method: method, encoding: encoding, parameters: parameters, success: success, failure: failure)
    
     }else{
    
         failure(statusCode: response.response!.statusCode, error:response.result.error!)
    
     }
    
  3. 在这种特殊情况下,您不是返回结果并调用失败回调,而是调用一个 login() 方法,该方法在必要的参数之后接受原始的 success()回调

    func loginAndAction(
        URLString:String,
        method:Method,
        encoding: Encoding,
        parameters:[String:AnyObject]?,
        success:(statusCode:Int, responseObject:AnyObject)->Void,
        failure:(statusCode:Int, error:NSError)->Void
        )->Void
    
  4. 如果身份验证成功

    var d:[String:AnyObject] = response.result.value as! [String:AnyObject]
    self.authToken = d["access_token"] as! String
    
    action(URLString, method: method,encoding:encoding, parameters: parameters, success: success, failure: failure)
    

此时,方法操作可以使用正确的工作 token 。

这应该每天只发生一次(基于 token 过期时间),并且它是适用于 oauth2 refresh_token 调用的机制。

关于java - 用java制作Jhipster REST客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798996/

相关文章:

iOS 不接收来自 Azure 通知中心的推送

http - Go 客户端程序生成大量处于 TIME_WAIT 状态的套接字

javascript - Nodejs - SolrClient,如何等待响应

java - 如何使用 Graph API 将图像上传到 Facebook

java - 如何在项目中应用Framework?

java - 如何使用 Scanner 方法 "hasNext"作为条件退出 java 中的 while 循环?

python - Flask - 通过 Flask-restful 与基于类的 View API 制作的 API

rest - 如何在 REST 客户端上测试我发布的 LEX 机器人

api - 客户端去: parse kubernetes json files to k8s structures

java - react 器: Flux<object> .subscribe() 与 .toStream()