2013-09-02 2 views
0

나는 스프링을 사용하여 페이스 북과 링크되는 App을 생성하고 있습니다. 앱이 실행되면 로그인 페이지로 리디렉션됩니다. 로그인 버튼을 클릭하면 홈페이지로 리디렉션됩니다. 내가 원하는 것은 로그인 버튼을 클릭하면 홈페이지로 리디렉션되고 끝에 고유 번호가 추가됩니다. 내 앱을 실행할 때마다 HTTP 상태 404 오류가 발생합니다. 나는 그 문제가 무엇인지 알 수 없다. 편집 나는 봄 사회 빠른, 내가 만든 유일한 수정을 사용하고있는 프로그램이었다 페이지스프링을 사용하여 컨트롤러에 패스 변수 전달하기

<%@ page session="false" %> 
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
    <html> 
     <head> 
      <title>Sign In</title> 
     </head> 
     <body> 
<c:set var="rand"><%= java.lang.Math.round(java.lang.Math.random() * 2) %></c:set> 
      <form action="<c:url value="/signin/facebook/${rand}" />" method="POST"> 
       <button type="submit">Sign in with Facebook</button> 
       <input type="hidden" name="scope" value="email,publish_stream,offline_access" /> 
      </form> 
     </body> 
    </html> 

홈 페이지

<%@ page session="false" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<html> 
    <head> 
     <title>Home</title> 
    </head> 
    <body> 
    <ul> 
     <li><a href="<c:url value="/signout" />">Sign Out</a></li> 
    </ul> 
     <p>${number}</p> 
    <h3>Your Facebook Friends</h3> 
    <ul> 
    <c:forEach items="${friends}" var="friend"> 
     <li><img src="http://graph.facebook.com/<c:out value="${friend.id}"/>/picture" align="middle"/><c:out value="${friend.name}"/></li> 
    </c:forEach> 
    </ul> 
    </body> 
</html> 

홈 컨트롤러

을에서

로그인 아래의 것들

@RequestMapping(value = "/{rand}", method = RequestMethod.GET) public String home(@PathVariable("rand") String rand, Model model) throws IOException { List<Reference> friends = facebook.friendOperations().getFriends(); FacebookProfile profile = facebook.userOperations().getUserProfile(); String userID = facebook.userOperations().getUserProfile().getId(); model.addAttribute("friends", friends); String accessToken = connectionRepository.getPrimaryConnection(Facebook.class).createData().getAccessToken(); System.out.println(accessToken); return "home"; } 
+0

어느 URL에서 404를 제공하고 있으며 해당 처리기 방법은 무엇입니까? –

+0

http : // localhost : 8080/my-app /가 오류를 표시합니다. 그냥 "/"요청을 처리하는 컨트롤러가 있어야합니까 ?? 위의 컨트롤러는 내가 가진 유일한 컨트롤러입니다 – IceNine

+1

요구 사항에 따라 로그인 페이지를 나타내는 뷰를 렌더링하여'/'를 처리하는 컨트롤러 메서드가 있어야합니다. –

답변

0

응용 프로그램의 기본 URL은 무엇이며 컨트롤러에도 루트 URL이 있습니까? 이 <c:url value="/signin/facebook/${rand}" /> 코드 행은 http://localhost:8080/yourAppname/signin/facebook/12342354665 행을 따라 무언가를 생성합니다.

구성 및 기타 주석에 따라 @RequestMapping(value = "/{rand}", method = RequestMethod.GET)@RequestMapping(value = "/signin/facebook/{rand}", method = RequestMethod.GET)으로 변경해야합니다. 컨트롤러 매핑에 따라 현재 매핑이 루트 수준 URL 만 제공합니다.

로깅을 사용하도록 설정 했습니까? 로그에서 실패한 매핑을 볼 수 있어야합니다.

+0

컨트롤러가 "/"요청을 처리하도록 변경하면 앱이 로그인 페이지로로드되고 http : // localhost : 8080/my-app/signin으로로드 된 다음 로그인 버튼 페이지를 클릭하면 http : // localhost : 8080/my-app/# _ = _로로드됩니다. – IceNine

+0

에 대해 조금 혼란스러워하는 URL에 signin/facebook이 있습니다. 내 웹 서버의 응용 프로그램 폴더에있는 my-app.war에 my-app building이라는 프로젝트가 있습니다. 루트 컨텍스트는/my-app /입니다. 그런 다음 로그인 페이지로 전달되는 시작 파일 (index.jsp?)을 가지고 있거나, 사용자가 로그인하지 않고 사용자를 대신하여 전달한다는 것을 감지하는 구성 (spring-security?)이있을 수 있습니다. 버튼을 클릭 할 때 일어나는 일에 대해 걱정할 필요없이 생성 된 마크 업 (페이지 소스)은 무엇입니까? – JohnMark13

+0

죄송합니다. 생성 된 마크 업을 얻으려면 어떻게해야합니까? – IceNine