2014-09-15 4 views
0

환경 : WildFly 8.1.REST 서비스는 항상 OK를 반환합니다. 왜?

하나의 서버에 2 개의 응용 프로그램을 배포합니다. 하나는 다른 사람과 연결하고 나머지 서비스에 POST 메서드를 실행하려고합니다. 서비스 프로젝트에서

내가 추가 :

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(); 
} 
} 

에서 :

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

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

를 지금까지 내가 제이보스와 JAX-RS에 대한 사용 설명서를 이해하고,이 서비스를 실행하기에 충분한 아래에 나열해야한다 프로젝트에서 전화를 걸면이 방법을 사용할 수 있습니다.

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 annotation = always OK를 사용하면 문제가되지 않습니다. 둘째, 메서드에서 디버거 활동이 없습니다 (응용 프로그램은이 메서드 내의 모든 중단 점에서 중지하지 않습니다). public 응답 login (LoginData ld) (Firefox에서 RESTClient를 사용할 때 작동합니다).

오, 또 다른 호기심 많은 것이 있습니다 · · ·이 200 OK 상태로 돌아온다 나는 항상 jsf 로그인 폼을 얻고 있습니다.

답변

0

web-resource-collection의 비보안 섹션에/rest/*를 추가하면 문제가 해결됩니다.