如果本文对您有所帮助,可以点一下赞👍
本文只是学习笔记,欢迎指错,转载标明出处
1、在SSM配置拦截器
LoginInterceptor.java
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
//获取请求的RUi:去除http:localhost:8080这部分剩下的
System.out.println("获取请求的RUi:去除http:localhost:8080这部分剩下的");
String uri = request.getRequestURI();
//UTL:除了login.jsp是可以公开访问的,其他的URL都进行拦截控制
if (uri.indexOf("login") >= 0) {
System.out.println("登陆");
return true;
}
if (uri.indexOf("reg") >= 0) {
System.out.println("注册");
return true;
}
if (uri.indexOf("getAllStoreInfo") >= 0) {
System.out.println("商家");
return true;
}
//获取session
HttpSession session = request.getSession();
BaseUser baseUser = (BaseUser) session.getAttribute("baseuser");
System.out.println(baseUser);
//判断session中是否有用户数据,如果有,则返回true,继续向下执行
if (baseUser!=null) {
System.out.println("已登陆");
return true;
}
//不符合条件的给出提示信息,并转发到登录页面
System.out.println("没登陆");
request.setAttribute("msg", "您还没有登录,请先登录!");
request.getRequestDispatcher("../login.jsp").forward(request, response);
return false;
}
}
在项目注册拦截器application-context.xml,并放行静态css和js等静态资源
<!-- 方法一:把所以静态文件放到一个static文件夹下,不会被拦截 -->
<mvc:resources location="/static/" mapping="/static/**"/>
<!-- 方法二:注册拦截器的时候,将js和css后缀的文件除外
/**的意思是所有文件夹及里面的子文件夹/*是所有文件夹,不含子文件夹-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/**/*.css"/>
<mvc:exclude-mapping path="/**/*.js"/>
<bean class="lingnan.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
前端页面访问静态资源
<% pageContext.setAttribute("ctx", request.getContextPath()); %>
<script src="${ctx}/static/layui/layui.js"></script>
工程目录如下
2、在SpringBoot配置拦截器
LoginInterceptor.java
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
String uri = request.getRequestURI();
System.out.println(this.getClass().getName()+":::获取请求的RUi:去除http:localhost:8080这部分剩下的:::"+uri);
/*
这里可以设置对特定的页面放行,请求url中带有“toLogin”的不拦截,这是放行的一种方法
if (uri.indexOf("toLogin") >= 0) {
//System.out.println("登陆");
return true;
}
*/
//获取sessiond的登陆信息loginBean
HttpSession session = request.getSession();
Admin loginBean = (Admin) session.getAttribute("loginBean");
//判断session中是否有用户数据,如果有,则返回true,继续向下执行
if (loginBean!=null) {
return true;
}
//不符合条件的给出提示信息,并转发到登录页面
request.setAttribute("msg", "您还没有登录,请先登录!");
request.getRequestDispatcher("/admin/toLogin").forward(request, response);
return false;
}
}
在SpringBoot注册拦截器,和SSM不一样,这次是通过@Configuration注解来注册的
WebMvcConfig.java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns(
"/admin/toLogin","/admin/login","/static/**");
}
}
application.yml(和application.xml作用一样的配置文件,我这里就不用xml了)
在springBoot中,static下的静态资源是默认映射到项目根目录的,这句话的意思是把static文件映射到它真实的存在地方去
spring:
mvc:
static-path-pattern: /static/**
没修改application.yml之前,访问静态资源方法如下
<link rel="stylesheet" th:href="@{/layui-v2.5.5/css/layui.css}" media="all">
修改application.yml之后,访问静态资源方法如下
<link rel="stylesheet" th:href="@{/static/layui-v2.5.5/css/layui.css}" media="all">
工程目录如下