拦截器学习运用
在网站开发过程中,拦截器是开发不可少的一部分,可防止恶意攻击
开发环境spring boot springbootmvc
逻辑是:
1:在登录时,验证用户的同时,获取session中的username
2:将session中的信息交给拦截器判断是否放行
3:将拦截器放入到配置文件或自定义WebMvcConfigurer中
核心类: 、
拦截器:HandlerInterceptor 主要实现方法:preHandle
配置类: WebMvcConfigurer 主要方法: addInterceptors
简单示例:
登录:获取session
@RequestMapping("/user/login")
public String login(@RequestParam("username") String username ,
@RequestParam("password") String password,
Model model, HttpSession session){
if(!StringUtils.isEmpty(username) && "123456".equals(password)){
session.setAttribute("loginUser",username);
return "redirect:/main.html";
}else{
model.addAttribute("msg","用户名或密码错误");
return "page-login";
}
web 开发的自定义WebMvcConfigurer 相当于配置文件的作用
拦截器:
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
Object loginUser = request.getSession().getAttribute("loginUser");
if(loginUser==null){
request.setAttribute("msg","没有权限,请先登录");
request.getRequestDispatcher("/").forward(request,response);
return false;
}else{
return true;
}
自定义配值类:
@Configuration
public class MyMVCConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/","/page-login.html","/user/login","css/**","images/**","js/**","fonts/**");
}
重点是addInterceptor后面的条件: ()放自定义连接器
addPathPatterns: 里面是我们要屏蔽的信息,
excludePathPatterns:不需要屏蔽的信息,如登录时的请求,主界面,和样式等信息
登录时的请求请一定一定注意不要屏蔽了