环境: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登录表。
答案 0 :(得分:0)
通过将:/ rest / *添加到web-resource-collection的非安全部分来解决问题。