2017-12-04 21 views
0

Hibernateを使用して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ページに存在するかどうかをチェックしたいだけです。その存在に応じて、私はページのビューを変更したい。

上記のコードは部分的に動作します。ログインすると、「ようこそuserId」と表示されます。

しかし、ページのロゴをクリックすると(最初のページに移動すると)、「ログイン」ボタンが表示されます。 session.loginIdが存在するので、「ログアウト」ボタンを表示する必要があります!

解決策はありますか?名前idと属性を確認する必要がありますようにあなたが

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

が、JSPチェックsessionScope.loginId上を入れてログイン方法で

+0

申し訳ありませんが、「インターセプタ」はこれを処理する最も良い方法です。それ以上のことは、まったく新しいクラスそのものではなく、複雑ではありません。あなたが本当にインターセプタを使いたくないなら、 'filter'を使います。 –

+0

@vipincp参照してください。私が「インターセプタ」のサンプルソースについて見たものは、ページをリダイレクトする必要があります。たとえば、ログインせずに一部のページにアクセスしようとすると、LoginHandlerはログインページをリダイレクトします。しかし、私はログインするための別のページを持っていません。ログインページなしで、ログインフォームだけで、インターセプターは可能ですか? – Lee

+0

ログインフォームがどのようにトリガーされたか、いくつかのパラメータなどに基づいていますか?そのパラメータはインターセプタから渡すことができます。 –

答えて

2

は、見えます。

+0

Omg!どうもありがとう。私は問題を解決した! – Lee

関連する問題