摘要:整理一个简单的拦截器模板,放上源码
拦截器逻辑
1.拦截想跳过登陆的所有请求
2,不拦截要登陆的请求
3.登陆失败后会跳到自己所在的页面
文章目录
实现效果
1网站首页
2登陆界面
3登陆成功
4登陆失败.
会弹出登陆失败的信息,然后重新刷新该页面
2相关的文件有:
com.how2java.interceptor.LoginInterceptor
package com.how2java.interceptor; //当前文件所在目录文件目录
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
HttpSession httpSession = request.getSession();
String url = request.getRequestURI();
//除了login.jsp是可以公开访问的,其余的URL都进行拦截
Object object = httpSession.getAttribute("userName");//获取session中userName
if(object != null){ //判断userName是否为非空,如果为非空,则表示已登录,可继续操作 即将这个请求传给相应的控制器
return true;
}else{ //如果为空,则表示未登录,返回登录界面 进行登陆
request.setAttribute("msg", "你还有没有登录,请先登录!");
//转发至登录页面
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
}
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
com.how2java.controller.LoginController
package com.how2java.controller;
import javax.servlet.http.HttpSession;
import javax.swing.*;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.awt.*;
@Controller
public class LoginController {
@RequestMapping("login.action")
public String login(String userName,String userPass,HttpSession session) {
System.out.println(userName);
System.out.println(userPass);
System.err.println(1);
session.setAttribute("userName",userName);
if(userName.equals("admin") && userPass.equals("123"))
{
return "index";
}
//如果登陆失败就重新返回登陆页面
JOptionPane.showMessageDialog(null, "登陆失败", "alert", JOptionPane.ERROR_MESSAGE);
return "login";
}
}
springMVC.xml
<mvc:interceptors>
<mvc:interceptor >
<mvc:mapping path="/login2"/>
<mvc:exclude-mapping path="/login"/>
<bean class="com.how2java.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
WEB-INF/jsp/index.jsp 登陆成功后的index
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<span>你已成功进入本系统</span>
</body>
</html>
WEB-INF/jsp/login.jsp
<%--
Created by IntelliJ IDEA.
User: dell
Date: 2019/4/21
Time: 13:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<a href="http://localhost:8080/listCategory"> 测试路径 </a><br>
<a href="http://localhost:8080/index"> 测试拦截器 </a>
</head>
<body>
</body>
</html>
index.jsp 网站的index
<%--
Created by IntelliJ IDEA.
User: dell
Date: 2019/4/21
Time: 13:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<a href="http://localhost:8080/listCategory"> 测试路径 </a><br>
<a href="http://localhost:8080/index"> 测试拦截器 </a>
</head>
<body>
</body>
</html>