一、所需要创建的文件
业务层和数据层将不再赘述
二、开始写代码
- CookieUtil
public class CookieUtil {
//设置Cookie
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String key, String value, int expiry){
Cookie cookie = new Cookie(key, value);
cookie.setMaxAge(expiry);
response.addCookie(cookie);
}
//获取所有Cookie
public static Map<String, String> getCookies(HttpServletRequest request){
Map<String, String> map = new HashMap<>();
Cookie cookies[] = request.getCookies();
if (cookies != null){
for(int i = 0; i < cookies.length; i++){
if(!"JSESSION".equals(cookies[i].getName()))
map.put(cookies[i].getName(), cookies[i].getValue());
}
}
return map;
}
//清空所有的Cookie
public static void clear(HttpServletRequest request, HttpServletResponse response){
Map<String, String> map = getCookies(request);
Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<String, String> me = iter.next();
Cookie cookie = new Cookie(me.getKey(), "");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
- LoginController
@Controller
public class LoginController {
@Autowired
private UserService userService;
@RequestMapping("/loginPage")
public String loginPage(){
return "login";
}
@RequestMapping("/login")
public String login(HttpServletRequest request, HttpServletResponse response, String username, String password, Model model){
User user = userService.getUserByName(username);
if(username.equals(user.getUsername()) && password.equals(user.getPassword())){
int expire = 60 * 60 * 24 * 7; //表示7天
CookieUtil.setCookie(request, response, "username", user.getUsername(), expire);
CookieUtil.setCookie(request, response, "password", user.getPassword(), expire);
model.addAttribute("username", username);
return "main";
}
return "login";
}
@RequestMapping("/main")
public String mainPage(HttpServletRequest request, Model model){
// 判断cookie是否存在,如存在则利用cookie登录,否则返回登录界面
Map<String, String> map = CookieUtil.getCookies(request);
String username = map.get("username");
String password = map.get("password");
if(username != null && password != null){
User user = userService.getUserByName(username);
if(username.equals(user.getUsername()) && password.equals(user.getPassword())){
model.addAttribute("username", username);
return "main";
}
}
return "login";
}
}
- login.jsp
<html>
<head>
<title>login</title>
<link rel="stylesheet" type="text/css" href="/css/bootstrap.css" />
<script src="/js/jquery-3.3.1.min.js"></script>
<script src="/js/bootstrap.js"></script>
</head>
<body>
<div class="container col-xs-2 col-xs-push-4">
<h1>Login</h1>
<form action="/login">
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" placeholder="Username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password" placeholder="Password">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
</body>
</html>
- main.jsp
<html>
<head>
<title>主页</title>
</head>
<body>
用户名:${username}
</body>
</html>
三、测试结果
登录成功在该页面会多出两个变量
下次再打开浏览器就无需再次登录