2017-12-04 1 views
0

최대 절전 모드를 사용하여 Spring MVC로 로그인 폼을 만들고 싶다.Spring MVC를 사용하여 로그인 정보를 유지하기위한 세션 처리 방법

로그인 정보를 유지하려면 '세션'을 사용해야한다는 것을 알았습니다.

그래서 'Controller.java', '.jsp'에서 사용합니다.

하지만 작동하지 않는 것 같습니다.

아래 코드는 제 코드입니다. Controller.java : 나는 session.id이 존재하는 경우에, 쇼 버튼을 로그 아웃하는 것을 목적으로하고 session.id이 존재하지 않는, 쇼

<c:if test="${sessionScope.loginId eq null}"> 
    <!-- Not login: show login button --> 
    <div class="loginArea"> 
     <form action="${loginAction}">  <!-- // URL '/login' --> 
      <input type="text" name="idInput" placeholder="ID" class="loginInput"> 
      <input type="password" name="pwInput" placeholder="PASSWORD" class="loginInput"> 
      <input id="loginButton" type="submit" value="login"> 
     </form> 
    </div> 
</c:if> 

<c:if test="${sessionScope.loginId ne null}"> 
    <!-- already login: show logout button --> 
    <div class="loginArea"> 
     <form action="${logoutAction}"> <!-- // URL '/logout' --> 
      <input type="button" name="idInput" id="loginInfo" value="Welcome ${sessionScope.loginId}"> 
      <input id="logoutButton" type="submit" value="LOGOUT"> 
     </form> 
    </div> 
</c:if> 

: 아래

@Controller 
public class PassengerController { 

    @Autowired 
    private PassengerService passengerService; 

    public void setPassengerService(PassengerService passengerService) { 
     this.passengerService = passengerService; 
    } 

    @RequestMapping(value = "/login") 
    public String login(HttpSession session, HttpServletRequest request) { 

     String id = request.getParameter("idInput"); 
     String pw = request.getParameter("pwInput"); 

     // check DB 
     // if it is right, add session. 
     session.setAttribute("id", id); 
     session.setAttribute("pw", pw); 

     return "flightschedule"; 
    } 

    @RequestMapping(value = "/logout") 
    public String logout(HttpSession session) { 
     session.invalidate(); 
     return "flightschedule"; 
    } 

} 

는 flightschedule.jsp의 일부입니다 로그인 버튼.

내가 인터셉터 또는 봄 보안 등을 사용하지 않는 ..

나는 그들이 내 작은 프로젝트에 너무 복잡있어 생각했다.

그리고 대부분의 내 페이지에는 로그인/로그 아웃 양식이 있습니다. 나는 별도의 페이지를 사용하여 로그인하지 않습니다.

그래서 요격기를 사용하고 싶지 않습니다. 난 그냥 세션 키가 일부 JSP 페이지에 존재 여부를 확인하고 싶습니다. 존재 여부에 따라 페이지의보기를 변경하고 싶습니다.

위 코드는 부분적으로 작동합니다. 로그인시 'Welcome userId'가 표시됩니다.

하지만 페이지의 로고를 클릭하면 (첫 페이지로 이동) 여전히 '로그인'버튼이 표시됩니다. 그것은 session.loginId가 있기 때문에 '로그 아웃'버튼을 보여줘야합니다!

해결책이 있습니까? 로그인 방법에

+0

유감스럽게도, 그러나 '인터셉터'가이 문제를 해결하는 가장 좋은 방법입니다. 그것보다 더 복잡한 것은 오히려 단지 새로운 클래스 그 자체입니다. 만약 정말로 인터셉터를 사용하고 싶지 않다면'filter'를 사용하십시오. –

+0

@vipincp 알겠습니다. 'interceptor' 샘플 소스에 대해 본 것은 일부 페이지를 리디렉션해야합니다. 예를 들어 로그인없이 일부 페이지에 액세스하려고하면 LoginHandler가 로그인 페이지를 리디렉션합니다. 하지만 로그인 할 별도의 페이지가 없습니다. 로그인 페이지가 없으면 로그인 양식만으로 인터셉터가 가능합니까? – Lee

+0

로그인 폼이 트리거되는 방식, 일부 매개 변수 또는 다른 것에 기반하여 올바르게 작동합니까? 이 매개 변수는 인터셉터에서 전달 될 수 있습니다. –

답변

2

당신은

// check DB 
    // if it is right, add session. 
    session.setAttribute("id", id); 
    session.setAttribute("pw", pw); 

를 넣어하지만 당신은 이름 id와 속성을 확인해야합니다 같은 JSP 체크 sessionScope.loginId에 보인다.

+0

Omg! 고마워. 나는 그 문제를 해결했다! – Lee

관련 문제