【发布时间】: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 登录表单。
【问题讨论】: