Spring MVC 拦截器
Spring MVC中的拦截器
(Interceptor)
类似于Servlet中的过滤器(Filter)
,它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
要使用Spring MVC中的拦截器,就需要对拦截器类进行定义和配置。通常拦截器类可以通过两种方式来定义。
通过实现HandlerInterceptor
接口,继承HandlerIntercepto
r接口的实现类。
编写目标控制器
package cn.zbw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
@Controller
public class LoginController {
@RequestMapping("/login.do")
public String login(String userName, String pwd, HttpServletRequest request){
System.out.println(userName);
System.out.println(pwd);
if (userName.equals("冰冰")&&pwd.equals("123456")){
request.getSession().setAttribute("name",userName);
}
return "redirect:/redirect.jsp";
}
}
创建登录的jsp
页面
<form action="/login.do" method="post">
用户名<input type="text" name="userName"><br>
密码<input type="password" name="pwd"><br>
<button>登录</button>
</form>
编写自定义拦截器
在这里需要注意:首先实现
HandlerInterceptor
接口是web.servlet
下的;其次就是没写实现方法不会报错(在ieda
中)时,需要按alt+o
或者fn+alt+insert
出现下面弹窗:
选择这个:
在preHandle
下面自定义拦截器
package cn.zbw.interceptor;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String name = (String) request.getSession().getAttribute("name");
String contextPath = request.getContextPath();
if (name==null||name==""){
response.sendRedirect(contextPath+"/login.jsp");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
springmvc.xml
文件配置
<mvc:interceptors>
<mvc:interceptor>
<!--拦截根目录下面的所有控制器-->
<mvc:mapping path="/**"/>
<!--不拦截登录-->
<mvc:exclude-mapping path="/login.do"></mvc:exclude-mapping>
<mvc:exclude-mapping path="/check.do"></mvc:exclude-mapping>
<bean id="loginInterceptor" class="cn.zbw.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
结果是:
点击之后会跳转到页面:
登录成功后可以去下载和上传
如何快速处理 json格式的数据
首先我们需要导入架包:版本一定不能过低,否则服务器无法启动!!!
下面是架包的图片以及和下载链接:
https://repo1.maven.org/maven2/com/fasterxml/jackson/core/
jsp
页面:
<%--
Created by IntelliJ IDEA.
User: ASUS
Date: 2021/03/19
Time: 上午 11:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<title>点击出现传入的值</title>
</head>
<body>
<script type="text/javascript">
$(function () {
$("#btn1").click(function () {
$.ajax({
type:"get",
url:"check.do",
dataType:"json",
success:function (data){
alert(data);
$("#show").html(data.name+","+data.age+","+data.address);
}
});
});
});
</script>
<button id="btn1">点我</button>
<div id="show"></div>
</body>
</html>
控制器页面:
package cn.zbw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
public class ChickController {
@RequestMapping("/check.do")
public @ResponseBody Map<String , Object> check(){
Map<String , Object> map = new HashMap<>();
map.put("name","冰冰");
map.put("age",21);
map.put("address","洛阳");
System.out.println(map);
return map;
}
}
结果是: