目录
- 注销功能实现
- 1.找到退出按钮修改请求路径
- 2.后端删除Session并跳转到登录页面
- 回车登录功能
- 登陆拦截
- 1.编写登录拦截器
- 2.配置拦截器
- 记住我
- 后端实现
- 页面实现
- 取消记住我
- 后端实现
- 页面实现
注销功能实现
1.找到退出按钮修改请求路径
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<header class="app-header">
<a class="app-header__logo" href="index.html">源码</a>
<a class="app-sidebar__toggle" href="#" data-toggle="sidebar" aria-label="Hide Sidebar"></a>
<!-- 导航条右边菜单 -->
<ul class="app-nav">
<!-- 用户菜单 -->
<li class="dropdown">
<a class="app-nav__item" href="#" data-toggle="dropdown" aria-label="Open Profile Menu">
<i class="fa fa-user fa-lg"></i></a>
<ul class="dropdown-menu settings-menu dropdown-menu-right">
<li>
<a class="dropdown-item" href="/system/logout">
<i class="fa fa-sign-out fa-lg"></i> 退出 </a>
</li>
</ul>
</li>
</ul>
</header>
2.后端删除Session并跳转到登录页面
UserController
@RequestMapping("/logout")
public String logout(HttpSession session) {
// 首先删除Session
session.invalidate();
// 跳转到登录页面
return "login";
}
回车登录功能
1.整个登录页面绑定键盘按压回车键事件
2.发送抽取之后的登陆请求
login.jsp
<script type="text/javascript">
$(function(){
// 抽取登录方法
function login(){
$(".login-form").ajaxSubmit({
success: function(msg){
if(msg.success){// 成功
// 跳转到后台首页
location.href="/system/index";
}else{
$("#loginError").html("<font color='red' size='4'>"+msg.error+"</font>");
}
}
});
}
$("#loginBtn").click(function(){
login();
});
// 整个页面绑定键盘按压事件
$(document).on("keypress",function(e){
// console.debug(e.keyCode)
if(e.keyCode==13){
login();
}
})
})
</script>
登陆拦截
防止直接跳过登录页面直接访问后台页面
1.编写登录拦截器
LoginInterceptor
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) throws Exception {
// 判断session中是否有user
// 获取session
Object user = req.getSession().getAttribute("USER_IN_SESSION");
if(user==null){// 没有登录
//跳转到登录页面
resp.sendRedirect("/system/login");
return false;
}
return true;
}
}
2.配置拦截器
applicationContext-mvc.xml
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 拦截器 -->
<mvc:interceptor>
<!-- 要拦截的配置,该配置必须写在不拦截的上面,/*拦截一级请求,/**拦截多级请求 -->
<mvc:mapping path="/system/**" />
<!-- 设置不拦截的配置 -->
<mvc:exclude-mapping path="/system/login"/>
<!-- <mvc:exclude-mapping path="/upload"/> -->
<!-- 配置拦截器 -->
<bean class="cn.itsource.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
记住我
有勾选记住我,账号密码正确,通过Cookie将账号密码显示到输入框中
<div class="animated-checkbox">
<label>
<input id="remember" name="remember" type="checkbox" value="1"><span class="label-text">记住我</span>
</label>
</div>
后端实现
UserController
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public AjaxResult login(Integer remember,String username,String password,HttpSession session,HttpServletRequest req,HttpServletResponse resp){
try {
User user = service.login(username,password);
// 把用户信息放入session中
session.setAttribute("USER_IN_SESSION", user);
// 判断是否勾选记住我
if(remember!=null){
// 创建cookie
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password", password);
// 设置路径
c1.setPath("/");
c2.setPath("/");
// 记住我时间 cookie存活时间
c1.setMaxAge(7*24*60*60);
c2.setMaxAge(7*24*60*60);
// 添加到浏览器
resp.addCookie(c1);
resp.addCookie(c2);
}
return new AjaxResult();
} catch (Exception e) {
// 从exception中取错误信息
return new AjaxResult(false, e.getMessage());
}
}
页面实现
用户名、密码和记住我标签加上id,用来填充数据
<div class="form-group">
<label class="control-label">用户名</label>
<input class="form-control" type="text" id="username" name="username" placeholder="用户名" autofocus>
</div>
<div class="form-group">
<label class="control-label">密码</label>
<input class="form-control" type="password" id="password" name="password" placeholder="密码">
</div>
<div class="form-group">
<div class="utility">
<div class="animated-checkbox">
<label>
<input id="remember" name="remember" type="checkbox" value="1"><span class="label-text">记住我</span>
</label>
</div>
</div>
</div>
login.jsp
// 记住我功能
var cookies = document.cookie;
if(cookies.indexOf("username=")!=-1){ // 记住我了
//console.debug(cookies);
// 根据;切割
var arr = cookies.split(";")
//console.debug(arr);
//遍历
for(var i in arr){
//console.debug(arr[i])
// 判断是否包含username
if(arr[i].indexOf("username")!=-1){
var username = arr[i].substring(arr[i].indexOf("=")+1);
// 回显
$("#username").val(username);
//console.debug(username);
}
if(arr[i].indexOf("password")!=-1){ // 获取密码
var password = arr[i].substring(arr[i].indexOf("=")+1);
// 回显
$("#password").val(password);
// 选中记住我
$("#remember").prop("checked",true);
}
}
}
取消记住我
后端实现
UserController
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public AjaxResult login(Integer remember,String username,String password,HttpSession session,HttpServletRequest req,HttpServletResponse resp){
try {
User user = service.login(username,password);
// 把用户信息放入session中
session.setAttribute("USER_IN_SESSION", user);
// 判断是否勾选记住我
if(remember!=null){
// 创建cookie
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password", password);
// 设置路径
c1.setPath("/");
c2.setPath("/");
// 记住我时间 cookie存活时间
c1.setMaxAge(7*24*60*60);
c2.setMaxAge(7*24*60*60);
// 添加到浏览器
resp.addCookie(c1);
resp.addCookie(c2);
}else{// 取消记住我
//获取cookies
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("username") || cookie.getName().equals("password")){
// 删除cookie
cookie.setMaxAge(0);
// 设置路径
cookie.setPath("/");
// 重新添加
resp.addCookie(cookie);
}
}
}
return new AjaxResult();
} catch (Exception e) {
// 从exception中取错误信息
return new AjaxResult(false, e.getMessage());
}
}
页面实现
login.jsp
// 记住我功能
var cookies = document.cookie;
if(cookies.indexOf("username=")!=-1){ // 记住我了
//console.debug(cookies);
// 根据;切割
var arr = cookies.split(";")
//console.debug(arr);
//遍历
for(var i in arr){
//console.debug(arr[i])
// 判断是否包含username
if(arr[i].indexOf("username")!=-1){
var username = arr[i].substring(arr[i].indexOf("=")+1);
// 回显
$("#username").val(username);
//console.debug(username);
}
if(arr[i].indexOf("password")!=-1){ // 获取密码
var password = arr[i].substring(arr[i].indexOf("=")+1);
// 回显
$("#password").val(password);
// 选中记住我
$("#remember").prop("checked",true);
}
}
}else{
// 取消记住我
$("#username").val("");
$("#password").val("");
$("#remember").prop("checked",false);
}