1

私はSpringが初めてで、SpringTomcatで動的Webアプリケーションを開発していますが、何らかの理由でSpring Security
を使用していません。 ユーザーが既にセッションに参加している ログインページにアクセスできないようにしたい.ここに私のコードがあります:

@Controller  
@RequestMapping("/login")  
@SessionAttributes("userAuthenticator")  
public class LoginController {  

    @RequestMapping(method = RequestMethod.GET)  
    public String showLogin(ModelMap model, HttpServletRequest request) {  
    System.out.println("Current Session: " + request.getSession(false));  

    if (request.getSession(false) == null) {  
    System.out.println("This means a new user wants to access the login page");  
    return "login";  
    }  

    else{  
    //means the user is already in session.So move him to another page say display.jsp  
    //actually I have done here with some other checking like getUserName() from   
    the model "UserAuthenticator" and if its again null redirect to login page.  
    }  

今のところ、 elseの部分は忘れてください。最初にブラウザに URL を入力した
とき: ..../AccountCreation/login.htm
コンソール出力:

Current Session: null  
This means a new user wants to access the login page  

新しいユーザーがページにアクセスしているため、まったく正常に見えます (ログイン ページも表示されます)。

しかし、URLを再入力してもページを更新すると、コンソール出力は次の ようになります。

Current Session: org.apache.catalina.session.StandardSessionFacade@511e0a  

そのセッションはどこから来たのですか?
(そのため、他の部分で、ブラウザで「Webページにリダイレクトされたループがあります」と表示されました)

Spring Securityを使用せずに私の目標を達成する方法を誰かに提案できますか?
これは今の私にとって非常に必要です.....

ありがとう...

4

3 に答える 3

2

セッション変数を使用できます。

HttpSession ses=request.getSession(false);
if(ses.getAttribute("sessionVar") == null)
     //show login page
else
     // don't show login page

セッション変数の設定:

 HttpSession ses=request.getSession();
 ses.setAttribute("sessionVar","someValueToShowSession");
于 2012-05-25T10:53:00.593 に答える
1

ユーザーがページに最初のリクエストを行うとすぐに、セッションが開始されます。したがって、2 回目の訪問では常に有効なセッションが提供されます。

彼が認証されたユーザーであるかどうかを確認したい場合は、セッションにフラグ/値を設定する必要があります。ユーザーIDのようなもの。確認できます

userId がセッションに設定されている場合 -> 有効なユーザー -> リダイレクト。

セッションでuserIdが設定されていない場合->ログインしていないユーザー->ログインページを許可します。

于 2012-05-25T10:50:59.097 に答える
0

これは予想される動作のみです。初めてログインすると、セッションが作成され、jsessionidcookieがブラウザに保存されます。session.invalidate()を使用してセッションを無効にするか、session-timeoutが原因でセッションが期限切れにならない限り、そのブラウザウィンドウでHttpSessionを使用できます。

すでにログインしているユーザーがloginpageurlと入力してログインページを表示するように制限する場合は、インターセプターを作成し、ユーザーがすでにログインしているかどうかを確認します。ユーザーがすでにログインしている場合は、ホームページにリダイレクトします。それ以外の場合は、ログインページに移動できるようにします。

于 2012-05-25T11:26:08.563 に答える