2017-01-28 9 views
0

私のプロジェクトのウェブサイトのログインログアウト機能を実装しようとしています。私はSPAを作っている。ログイン/ログアウトをグローバルにするための最良の方法は何ですか?つまり、ログアウトした後に私達に連絡したり、私たちについてのような他のリンクをクリックした場合、クリックされたままになりますか?私が間違っているところそれを修正する方法は? ログアウトが終了するまでどのようなロジックを適用する必要がありますか? ログインボタンをログアウトに変更するためにjavascriptを使用しましたログインログアウトセッションin spring mvc

私が知りたいことは、ログイン/ログアウトボタンをポータル全体と認証されていないサイトに表示する方法です?どういうわけかヘッダー上で自分のコードを実行することは可能ですか?それとも他の提案がありますか?現在、サインインボタンをクリックすると、tempの値がtrueになり、ログアウトボタンが表示されますが、私たちのような他のページをクリックすると、tempの値がtrueになっていません。 ?

UserController.java

@RequestMapping("/login") 
    public ModelAndView loginHere() { 
     log.debug("Starting of the method loginHere"); 
     System.out.println("loginHere"); 
     ModelAndView mv = new ModelAndView("/home"); 
     mv.addObject("user", user); 
     mv.addObject("isUserClickedLoginHere", "true"); 
     mv.addObject("message", "Welcome to login page"); 
     log.debug("Ending of the method loginHere"); 
     System.out.println("Ending login here"); 

     return mv; 
    } 

    @RequestMapping(value = "/validate", method = RequestMethod.GET) 
    public ModelAndView validate(@RequestParam(value = "username") String userID, 
      @RequestParam(value = "password") String password) { 
     log.debug("Starting of the method validate"); 
     System.out.println("validate"); 

     ModelAndView mv = new ModelAndView("/home"); 

     user = userDAO.validate(userID, password); 
     // if the record exist with this userID and password it will return user 
     // details else will return null 
     if (user != null) { 
      log.debug("Valid Credentials"); 

      session = req.getSession(); 
/*   session.setMaxInactiveInterval(1*10); 
*/   

      session.setAttribute("loggedInUser", user.getName()); 
      session.setAttribute("loggedInUserID", user.getUsername()); 

      session.setAttribute("user", user); 

      mv.addObject("homePagee", "true"); 
      mv.addObject("temp", "true"); 

      if (user.getRole().equals("ROLE_ADMIN")) { 
       log.debug("Logged in as Admin"); 
       mv.addObject("isAdmin", "true"); 
       /* 
       * session.setAttribute("supplier", supplier); 
       * session.setAttribute("supplierList", supplierDAO.list()); 
       * 
       * session.setAttribute("category", category); 
       * session.setAttribute("categoryList", categoryDAO.list()); 
       */ 

      } else { 
       log.debug("Logged in as User"); 
       mv.addObject("isAdmin", "false"); 

       // myCart = cartDAO.list(userID); 
       /* 
       * mv.addObject("myCart", myCart); // Fetch the myCart list 
       * based on user ID List<MyCart> cartList = 
       * cartDAO.list(userID); mv.addObject("cartList", cartList); 
       * mv.addObject("cartSize", cartList.size()); 
       */ 
      } 

     } else { 
      log.debug("Invalid Credentials"); 

      mv.addObject("invalidCredentials", "true"); 
      mv.addObject("errorMessage", "Invalid Credentials"); 

     } 
     log.debug("Ending of the method validate"); 
     return mv; 
    } 

@RequestMapping("/logout") 
public ModelAndView logout(HttpServletRequest request, HttpServletResponse response) { 
    log.debug("Starting of the method logout"); 
    System.out.println("Starting of the method logout"); 

    ModelAndView mv = new ModelAndView("/home"); 
    session.invalidate(); 
    session = request.getSession(true); 
    mv.addObject("homePagee", "true"); 
    mv.addObject("temp1", "true"); 

    Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

    if (auth != null) { 
     new SecurityContextLogoutHandler().logout(request, response, auth); 
    } 
    System.out.println("Ending of the method logout"); 

    log.debug("Ending of the method logout"); 
    return mv; 
    // return "redirect:/login?logout"; 

} 

Logout.JSP

<c:if test="${temp}"> 
     <script type="text/javascript"> 
      /* var loginbtn = document.getElementById("login-btn"); 
      var signupbtn = document.getElementById("signup-btn"); 
      var myaccountbtn = document.getElementById("logout-btn"); 
      signupbtn.innerHTML = ""; 
      loginbtn.innerHTML = ""; 
      myaccountbtn.style.display = "block"; 
      */ 
      /*   loginbtn.href = "logout"; 
      */   

     </script> 
    </c:if> 
    <c:if test="${temp1}"> 
       <script> 
        var loginbtn = document.getElementById("login-btn") 
        var signupbtn = document.getElementById("signup-btn") 
        var myaccountbtn = document.getElementById("logout-btn"); 

        loginbtn.innerhtml = "Login"; 
        signupbtn.innerHTML = "Signup"; 
        loginbtn.href = "login"; 
        myaccountbtn.style.display = "none"; 

       </script> 

     </c:if> 

login.jspを

<div class="container"> 
     <div class="card card-container"> 
      <!-- <img class="profile-img-card" src="//lh3.googleusercontent.com/-6V8xOA6M7BA/AAAAAAAAAAI/AAAAAAAAAAA/rzlHcD0KYwo/photo.jpg?sz=120" alt="" /> --> 
      <img id="profile-img" class="profile-img-card" 
       src="//ssl.gstatic.com/accounts/ui/avatar_2x.png" /> 
      <p id="profile-name" class="profile-name-card"></p> 
      <form class="form-signin" action="validate"> 
       <span id="reauth-email" class="reauth-email"></span> <input 
        type="username" name="username" id="inputEmail" 
        class="form-control" placeholder="Username" required autofocus> 
       <input type="password" name="password" id="inputPassword" 
        class="form-control" placeholder="Password" required> <input 
        type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 
       <div id="remember" class="checkbox"> 
        <label> <input type="checkbox" value="remember-me"> 
         Remember me 
        </label> 
       </div> 
       <button class="btn btn-lg btn-primary btn-block btn-signin" 
        type="submit">Sign in</button> 
      </form> 
      <!-- /form --> 
      <a href="#" class="forgot-password"> Forgot the password? </a> 
     </div> 
     <!-- /card-container --> 
    </div> 
    <!-- /container --> 
</div> 

Header.jsp

<li class="upper-links"><a class="links" id="signup-btn" 
        href="register">Signup</a></li> 

       <li class="upper-links"><a class="links" id="login-btn" 
        href="login">Login</a></li> 
       <li class="upper-links dropdown"><a 
        class="dropdown-toggle links" data-toggle="dropdown" role="button" 
        aria-haspopup="true" aria-expanded="false" id="logout-btn" 
        href="loginHere" style="display: none;">My Account<span class="caret"></span></a> 
        <ul class="dropdown-menu" style="width: 40%;"> 
         <li><a href="#">Account</a></li> 
         <li><a href="#">Orders</a></li> 
         <li><a href="#">Wishlist</a></li> 
         <li role="separator" class="divider"></li> 
         <li><a href="logout">Logout</a></li> 
        </ul></li> 
+1

をチェックアウトすることができますあなたは、なぜあなた自身を改革...すでにアウトオブボックスログアウトをサポートしている春のセキュリティを使用していますか?なぜフレームワークを回避するのですか? –

+0

私が知りたいのは、ユーザーがログインしているかどうかに基づいて、ポータル全体と認証されていないサイト全体にログイン/ログアウトボタンを表示する方法です。どういうわけかヘッダー上で自分のコードを実行することは可能ですか?それとも他の提案がありますか?現在、サインインボタンをクリックすると、tempの値がtrueになり、ログアウトボタンが表示されますが、私たちのような他のページをクリックすると、tempの値がtrueになっていません。 ? –

答えて

0

あなたはできるトラックのユーザのユーザHTTPセッションとセッションのプロジェクト、ベースへのユーザのログイン/ログアウトを扱う、あなたのプロジェクトに他のビジネスロジックを実装することができます。

コントローラでシンプルなログイン/ログアウト:ログインユーザの後

@PostMapping("/dologin") 
public String userLogin(HttpSession session, @ModelAttribute("user") User 
user, Model model) { 
    if (user.getEmail().equals("[email protected]") && 
    user.getPassword().equals("12345")) { 
     user.setFname("MD IMRAN"); 
     user.setMname("HOSSAIN"); 
     user.setLname("BABU"); 
     user.setAge(28); 
     session.setAttribute("user", user); 
    } else { 
     model.addAttribute("message", "Login failed. Try again."); 
     return "login"; 
    } 
    return "redirect:/user/info"; 
} 

@GetMapping("/logout") 
public String logout(HttpSession session) { 
    session.invalidate(); 
    return "redirect:/login"; 
} 

@GetMapping("/info") 
    public String userInfo(HttpSession session) { 
    return "user"; 
} 

とセッションスコープにユーザーデータを設定し、プロジェクト内の任意のからそれらのデータにアクセスすることができます。 user.jspファイルから

Accessデータ:私のプロジェクトで

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ page isELIgnored = "false" %> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <title>BORAJI.COM</title> 
    </head> 
    <body> 

     <h4>User name: ${user.fname} ${user.mname} ${user.mname}</h4> 
     <h4>User Age: ${user.age}</h4> 
     <h4>User Email: ${user.email}</h4> 
     <a href="/LoginRegUsingSession/logout">Log out</a><br> 

    </body> 
</html> 

iは、春のインターセプタを使用してユーザーを追跡します。 あなたは私のプロジェクトは、このリンクを使用
https://github.com/imrangthub/LoginRegUsingSession/tree/master/LoginRegUsingSession