【问题标题】:REST service always returns OK, Why?REST 服务总是返回 OK,为什么?
【发布时间】:2014-09-15 17:35:43
【问题描述】:

环境:WildFly 8.1。

我在一台服务器上部署了 2 个应用程序。一个是与其他人连接并尝试在休息服务上运行 POST 方法。

在我添加的服务项目中:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rest")
public class RsActivator extends Application {
}

据我了解 Wildfly 和 jax-rs 的用户指南,这应该足以运行下面列出的服务:

import javax.annotation.security.PermitAll;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import pl.patom.en.rest.model.LoginData;
import pl.patom.en.security.model.User;
import pl.patom.en.services.UserService;

@Path("services")
public class RestService {

@Inject
private UserService userService;

@PermitAll
@POST
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
@Path("/login")
public Response login(LoginData ld) {
    User checkedUser = userService.findByLogin(ld.getUsername());
    if (checkedUser == null || !checkedUser.getPassword().equals(ld.getPassword())) {
        return Response.serverError().build();
    }
    return Response.ok().build();
}
}

在我调用服务的项目中,我有这个方法:

public String login() {
    try {
        HttpClient client = HttpClientBuilder.create().build();
        HttpPost postRequest = new HttpPost("http://localhost:8080/en/rest/services/login/");
        LoginData ld = new LoginData(username, password);
        Gson gson = new Gson();
        String json = gson.toJson(ld);
        StringEntity input = new StringEntity(json);
        input.setContentType("application/json");
        postRequest.setEntity(input);
        postRequest.setHeader("Authorization", "Basic cm9vdDpyb290");
        HttpResponse response = client.execute(postRequest);
        if (response.getStatusLine().getStatusCode() == 200) {
            loggedIn = true;
            return "/secured/index.xhtml?faces-redirect=true";
        } else {
            loggedIn = false;
        }
    } catch (Exception e) {
        loggedIn = false;
    }
    return null;
}

为什么我总是得到 200 OK 响应?如果我使用@GET 或@POST 注释没关系= 总是好的。其次,方法中没有调试器活动(应用程序永远不会在此方法中的任何断点处停止): 公共响应登录(LoginData ld) (当我在 Firefox 中使用 RESTClient 时,它可以工作)。

哦,还有一个奇怪的事情......作为回报,我总是得到 jsf 登录表单。

【问题讨论】:

    标签: java rest wildfly-8


    【解决方案1】:

    通过将 /rest/* 添加到 web-resource-collection 的非安全部分来解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2019-06-20
      • 1970-01-01
      相关资源
      最近更新 更多