web 项目要有登陆,如果没有登陆就访问主界面,需要拦截,并返回登录界面,下面是定义拦截器的方法:
首先创建一个 interceptor 包,定义登录拦截器,
需要实现 HandlerInterceptor 接口,然后重写 preHandle 方法:
package com.example.practice_0818.interceptor;
import com.example.practice_0818.util.JwtUtil;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @Classname LoginInterceptior
* @Description 登录拦截器
* @Date 2021/8/18 11:07
* @Created by thx
*/
public class LoginInterceptor implements HandlerInterceptor {
/**
* @author thx
* @description 重写拦截器,在访问 mvc 的时候先进入
* @yyds: thx yyds
* @date 2021/8/18 11:09
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("进入拦截区");
/**
* @author thx
* @description 判断是否登录过
* @yyds: thx yyds
* @date 2021/8/18 11:24
*/
//请求头的内容
String token = request.getHeader("token");
if (JwtUtil.getUser(token) == null) return false;
return true;
}
}
同时还要定义一个 config 类,自定义拦截器:
package com.example.practice_0818.config;
import com.example.practice_0818.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @Classname WebConfigMvc
* @Description Mvc 配置类
* @Date 2021/8/18 11:09
* @Created by thx
*/
@Configuration
@Component
public class WebConfigMvc implements WebMvcConfigurer {
/**
* @author thx
* @description 自定义拦截器
* @yyds: thx yyds
* @date 2021/8/18 11:10
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor())
// 拦截所有路径
.addPathPatterns("/**")
// 下面的不拦截
.excludePathPatterns("/user/login/**");
// .excludePathPatterns("/login/**", "/images/**","/js/**");
}
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
}
前端返回 token 对象
@RequestMapping("login")
public String login(String userName, String password) {
ResultInfo<User> resultInfo = userService.userLogin(userName, password);
String token = "";
if (resultInfo.getCode() == 200) {
token = JwtUtil.generateToken(resultInfo.getResult());
}
return token;
}
拿到令牌以后,在 postMan 测试,放入请求头中,完成登陆拦截器