春季mvc中的登录注销会话



我正在尝试为我的项目网站实现登录注销功能。我在做SPA。使登录/注销全局化的最佳方法是什么?即,如果我在登录后点击任何其他链接,如联系我们或关于我们,注销将一直保持到点击?我哪里错了怎么纠正?我应该应用什么逻辑,以便注销一直保持到最后?我使用javascript更改登录按钮以注销

我想知道的是,我如何根据用户是登录还是注销,在整个门户网站和我们未经验证的网站上显示登录/注销按钮?我有可能以某种方式在头上执行我的代码吗?或者你还有其他建议吗?目前,当我点击登录按钮时,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";
}

注销.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>

您可以使用Http会话来跟踪用户并处理用户登录/注销到您的项目,基于会话您可以实现项目的其他业务逻辑。

简单登录/注销控制器:

@PostMapping("/dologin")
public String userLogin(HttpSession session, @ModelAttribute("user") User 
user, Model model) {
if (user.getEmail().equals("imranmadbar@gmail.com") && 
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文件访问数据:

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

在我的项目中,我使用spring拦截器跟踪用户。您可以使用此链接查看我的项目
https://github.com/imrangthub/LoginRegUsingSession/tree/master/LoginRegUsingSession

最新更新