SpringMVC 拦截器
1:业务测试说明
不登录的情况下 直接访问welcome.jsp会被拦截
拦截器过滤登录页、登录验证请求以及登录的情况下
2:编写controller
com\applesnt\controller\LoginController.java
package com.applesnt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping("/user")
public class LoginController {
//请求登录界面
@RequestMapping("/login.html")
public String toLogin(){
return "login";
}
//登录校验
@RequestMapping("/loginVerification")
public String login(HttpServletRequest request,String username, String password){
//获取sesison
HttpSession session = request.getSession();
//判断用户名和密码的正确性
if("admin".equals(username)&&"123456".equals(password)){
//把用户名放到session中
session.setAttribute("LoginUsername",username);
//判断正确则进入主界面
return "welcome";
}else {
//判断错误则进入登录页
return "login";
}
}
//直接请求系统首页界面
@RequestMapping("/welcome.html")
public String towelcome(){
return "welcome";
}
}
3:创建相关页面
web\WEB-INF\jsp\login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/user/loginVerification">
用户名:<input type="text" name="username"><br />
密 码:<input type="text" name="password"><br />
<input type="submit" value="登录">
</form>
</body>
</html>
web\WEB-INF\jsp\welcome.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>您好:${sessionScope.LoginUsername} 欢迎进入系统主界面</h3>
</body>
</html>
4:编写拦截器类
实现HandlerInterceptor接口
com\applesnt\interceptor\LoginInterceptor.java
package com.applesnt.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//实现HandlerInterceptor接口
public class LoginInterceptor implements HandlerInterceptor {
/*业务执行前
* return false:不放行
* return true:放行
* */
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取session
HttpSession session = request.getSession();
//获取用户名
String loginValue = (String) session.getAttribute("LoginUsername");
//如果session中的用户名有值则放行
if (loginValue != null){
return true;
}
//获取前端传递过来的uri
String uri = request.getRequestURI();
//如果是访问登录界面请求则放行
if("/user/login.html".equals(uri)){
return true;
}
//如果是登录验证请求则放行
if("/user/loginVerification".equals(uri)){
return true;
}
//其他情况则不放行
return false;
}
/*业务执行后*/
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
/*业务执行后:清理*/
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
5:在springmvc-servlet.xml配置拦截器
resources\springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.applesnt.controller"/>
<!-- 让Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<!--annotation-driven配置帮助我们完成处理器映射器和处理器适配器-->
<mvc:annotation-driven />
<!--视图解析器:DispatcherServlet给他的ModelAndView-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.applesnt.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
</beans>
6:测试
登录地址:http://localhost/user/login.html
首页地址:http://localhost/user/welcome.html