一 创建项目
创建一个Sping Boot项目 并且在创建的时候集成Sping Web。目录结构如图所示。
二 自定义拦截器
拦截器拦截的对象是当页面跳转的时候查看session是否存在,例如只有用户在登录以后才可以访问自己的主页,所以当页面直接跳转到用户主页的时候会判断有没有这个用户的信息,如果有则通过,如果没有则拦截并跳转到程序设置的页面
package com.example.taskaop.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author : chenjianbo
* @Data : 2021/8/9 16:00
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
//登录时如果用户名为空则没有登录 返回到登录页面
if (request.getSession().getAttribute("user") == null) {
response.sendRedirect("/login");
return false;
}
return true;
}
}
三 配置拦截对象
当配置好拦截器以后要把自己定义好的拦截器配置到项目中并设置要拦截哪些对象或者添加要放行的对象,即对那些对象不拦截。
package com.example.taskaop.interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* @Author : chenjianbo
* @Data : 2021/8/9 16:10
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//加入自定义的拦截器登录后台时进行拦截安全验证,其他页面不用验证打开额外路径
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/check")
.excludePathPatterns("/admin/login");
}
}
四 测试
根据上面的代码进行测试,写一些页面的跳转看看跳转是否会被拦截,是否会被放行。
package com.example.taskaop.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author : chenjianbo
* @Data : 2021/8/9 16:43
*/
@RestController
public class LoginController {
@RequestMapping("/login")
public String login(String name,String pwd) {
return "这是登录界面"+name+pwd;
}
/**
* @params
* @return int
* @exception ”安全接口验证 该接口是被放行的所以可以在页面上看到返回值“
*/
@RequestMapping("/admin/check")
public int check() {
return 0;
}
/**
* @params
* @return java.lang.String
* @exception "安全接口验证 自定义拦截器在没有登录之前无法访问其他页面,页面会跳转到设定的页面"
*/
@RequestMapping("/admin/log")![在这里插入图片描述](https://img-blog.csdnimg.cn/d589f997d5d04d4cb88e14896755c746.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc4ODE0Mw==,size_16,color_FFFFFF,t_70#pic_center)
public String t(){
return "dsadas";
}
}
代码结构图: