验证用户是否登录
1:初始页 ;可以跳转到登录页面和首页
2:首页 :只有登录之后才能进入,不然只能跳转回登录页面
3:登录页: 登录之后跳到首页
4:controller:处理请求
5:Interceptor :拦截请求,如果登录就放行
初始页
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/goLogin">登录页面</a>
<a href="${pageContext.request.contextPath}/goMain" >首页</a>
</body>
</html>
首页
main.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>首页</h1>
${msg}
<a href="${pageContext.request.contextPath}/remove">注销</a>
</body>
</html>
登录页
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>登录页面</h3>
<form action="${pageContext.request.contextPath}/login" method="post">
用户名:<input type="text" name="userName"><br>
密码:<input type="text" name="password"><br>
<input type="submit" value="登录页">
</form>
</body>
</html>
controller
loginController
@Controller
public class loginController {
// 跳转首页
@RequestMapping("/goMain")
public String main(){
return "main";
}
// 跳转登录页面
@RequestMapping("/goLogin")
public String goLogin(){
return "login";
}
//登录页面
@RequestMapping("/login")
public String login(String userName, String password, HttpSession session, Model model){
System.out.println("用户名:"+userName+"密码:"+password);
// 用session保存用户名
session.setAttribute("name",userName);
model.addAttribute("msg",userName);
return "main";
}
// 注销session
@RequestMapping("remove")
public String removeSession(HttpSession session){
session.removeAttribute("name");
return "redirect:/main";
}
}
Interceptor
//登录页面拦截器
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 查看url中是否包含"login"
if (request.getRequestURI().contains("login")) {
return true;
}
HttpSession session = request.getSession();
// 如果用户已登陆也放行 查看session中有无值
if(session.getAttribute("name") != null) {
return true;
}
// 用户没有登陆跳转到登陆页面
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
}
在springmvc-servlet.xml配置拦截器
<!-- 定义拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有请求 -->
<mvc:mapping path="/**"/>
<bean class="com.config.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有请求 -->
<mvc:mapping path="/**"/>
<bean class="com.config.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
结果