interceptor拦截器实现后台登录拦截
1、配置spring-mvc.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 http://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">
<!--1、注解驱动-->
<mvc:annotation-driven/>
<!--2、静态资源过滤-->
<mvc:default-servlet-handler/>
<!--3、扫描包:controller,interceptors-->
<context:component-scan base-package="com.ku.controller,com.ku.interceptors"/>
<!--4、视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--5、配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--这里可以添加需要拦截的请求-->
<mvc:mapping path="/manager/main"/>
<!--
<mvc:mapping path="/**"/>: /** 表示拦截所有请求,
<mvc:exclude-mapping path="/client/video"/> :表示不拦截 /client/video请求
-->
<!--<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/client/video"/>-->
<ref bean="loginIntercept"></ref>
</mvc:interceptor>
</mvc:interceptors>
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
<mvc:view-controller path="/manager/main" view-name="manager/main"></mvc:view-controller>
<mvc:view-controller path="/client/video" view-name="client/video"></mvc:view-controller>
<mvc:view-controller path="/manager/managerLogin" view-name="manager/managerLogin"></mvc:view-controller>
</beans>
注意点:扫描包要扫描到interceptors包
2、配置web.xml文件
添加HiddenHttpMethodFilter拦截器
<!--配置HiddenHttpMethodFilter拦截器-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、编写LoginIntercept.java文件
让LoginIntercept类实现HandlerInterceptor接口,并重写其中的方法,在preHandle方法里进行验证是否登录
package com.ku.interceptors;
import com.ku.pojo.Admin;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class LoginIntercept implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Admin loginAdmin = (Admin) request.getSession().getAttribute("loginAdmin");
if(loginAdmin != null){
return true;
} else {
response.sendRedirect(request.getContextPath()+"/manager/managerLogin");
return false;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
注意点:@Component注解别忘了
4、编写jsp页面
- index.jsp
<%--
Created by IntelliJ IDEA.
User: aria
Date: 2022/4/20
Time: 8:54
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/client/video">前往视频专区</a><br>
<a href="${pageContext.request.contextPath}/manager/main">前往后台管理</a>
</body>
</html>
- video.jsp
<%--
Created by IntelliJ IDEA.
User: aria
Date: 2022/4/20
Time: 8:57
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>视频专区</title>
</head>
<body>
视频专区
</body>
</html>
- main.jsp
<%--
Created by IntelliJ IDEA.
User: aria
Date: 2022/4/20
Time: 8:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>后台主页</title>
</head>
<body>
后台主页<br>
管理员姓名:${sessionScope.loginAdmin.adminName}
</body>
</html>
- managerLogin.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: aria
Date: 2022/4/20
Time: 9:03
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/manager/login" method="post">
用户名:<input type="text" name="adminName"><br>
密 码:<input type="password" name="adminPassword"><br>
<input type="submit" value="登录">
</form>
<c:if test="${msg != null}">
${msg}
</c:if>
</body>
</html>
5、项目结构
项目使用到了MyBatis逆向工程生成mapper和pojo。controller和service这里也不展示了,如果搜到这篇文章那应该这些文件的编写都不是问题