REST服务总是返回OK,为什么?

时间:2014-09-15 17:35:43

标签: java rest wildfly-8

环境: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时它可以工作。)

Oo,还有另外一件奇怪的事情......作为对200 OK状态的回报,我总是得到jsf登录表。

1 个答案:

答案 0 :(得分:0)

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