2017-01-28 9 views
0

Ich versuche, Login Logout-Funktionalität für meine Projekt-Website zu implementieren. Ich mache SPA. Was ist der beste Weg, um das Anmelden/Abmelden global zu machen, d. h. wenn ich auf einen anderen Link klicke, wie uns kontaktieren oder über uns nach dem Login? Wo ich falsch liege Wie kann ich es korrigieren? Welche Logik soll ich anwenden, damit das Logout bis zum Ende bleibt? Ich habe JavaScript verwendet, um Login-Taste zu ändern, um sich abzumeldenLogin Logout Sitzung im Frühjahr mvc

Was ich wissen möchte ist, wie bekomme ich eine Login/Logout-Taste über das gesamte Portal und unsere nicht authentifizierte Website basierend darauf angezeigt, ob der Benutzer an- oder abgemeldet ist ? Ist es mir möglich, meinen Code auf dem Header irgendwie auszuführen? Oder haben Sie andere Vorschläge? Momentan, wenn ich auf den Signin-Button klicke, wird der Wert von temp an true übergeben und der Logout-Button wird angezeigt, aber jetzt, wenn ich auf eine andere Seite klicke wie über uns wurde der Wert von temp nicht richtig übergeben ..so wie man das über das komplette Portal macht ?

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

Sie verwenden Spring Security Check-out, die bereits unterstützt Abmelde out-of-the-box ... Warum Ihre eigene neu erfinden? Warum das Framework umgehen? –

+0

Was ich wissen möchte ist, wie bekomme ich eine Login/Logout-Taste, um auf dem gesamten Portal und unserer nicht authentifizierten Website basierend darauf angezeigt werden, ob der Benutzer an- oder abgemeldet ist? Ist es mir möglich, meinen Code auf dem Header irgendwie auszuführen? Oder haben Sie andere Vorschläge? Momentan, wenn ich auf den Signin-Button klicke, wird der Wert von temp an true übergeben und der Logout-Button wird angezeigt, aber jetzt, wenn ich auf eine andere Seite klicke wie über uns wurde der Wert von temp nicht richtig übergeben ..so wie man das über das komplette Portal macht ? –

Antwort

0

können Sie Benutzer Http Session für Nutzer zu verfolgen und Benutzer-Login/Logout zu einem Projekt behandeln, Base auf Sitzung können Sie andere Geschäftslogik zu einem Projekt umzusetzen.

Einfache Login/Logout In Controller:

@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"; 
} 

Nach Anmeldung Benutzer und setzen Sie Benutzerdaten auf Sitzungsbereich Sie diese Daten von allen im Projekt zugreifen können.

Zugangsdaten von user.jsp Datei:

<%@ 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> 

In meinem Projekt i verfolgen Benutzer mit Feder Abfangjäger. Sie können mein Projekt verwenden Sie diesen Link
https://github.com/imrangthub/LoginRegUsingSession/tree/master/LoginRegUsingSession