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