拦截器
- 拦截器是 AOP 思想的一个具体应用
- 拦截器只会拦截访问控制器的方法,如果访问的是 jsp/html/css/image/js 是不会进行拦截的
- 实现了 HandlerInterceptor 接口的类就可以用来自定义拦截器
编写一个拦截器-登录验证demo
- 要求在点击进入首页的时候验证是否以登录,为登录的话自动跳转到登录页面,以登录的话则放行
配置 web.xml 和 springmvc-servlet.xml 文件
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.yqly.config.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
Controller.java 文件
package com.yqly.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
@Controller
public class LoginController {
@RequestMapping("/loginT")
public String loginT(HttpSession session, String username, Model model){
session.setAttribute("username",username);
model.addAttribute("username",username);
return "main";
}
@RequestMapping("/main")
public String main(){
return "main";
}
@RequestMapping("/login")
public String login(){
return "login1";
}
@RequestMapping("/clear")
public String clear(HttpSession session, String username, Model model){
session.removeAttribute("username");
return "login1";
}
}
前端页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<h2><a href="${pageContext.request.contextPath}/login">登录页面</a></h2>
<h2><a href="${pageContext.request.contextPath}/main">进入首页</a></h2>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/loginT" method="post">
用户名:<input type="text" name="username">
密码:<input type="text" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<h1>这是首页</h1>
<h3>${username}用户登录了</h3>
<a href="${pageContext.request.contextPath}/clear">注销</a>
</body>
</html>
拦截器
- 返回值为 true 时,允许穿过该拦截器
- 返回值为 false 时,不允许穿过该拦截器
package com.yqly.config;
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;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
if (session.getAttribute("username") != null || request.getRequestURI().contains("login") || request.getRequestURI().contains("loginT")) {
return true;
} else {
request.getRequestDispatcher("/WEB-INF/jsp/login1.jsp").forward(request, response);
return false;
}
}
}
文章评论