1.在启动类添加注解:@ServletComponentScan
2.添加过滤器类
2.1添加注解:@WebFilter(urlPatterns = “xxxxxxx”,filterName = “xxxxxx”)
2.2过滤类实现Filter
2.3方法重写
代码:
loginFilter:
@WebFilter(urlPatterns = "/api/v1/pri/*",filterName = "loginfilter")
public class loginFilter implements Filter {
//用于序列化json数据
private static final ObjectMapper objectMapper=new ObjectMapper();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("这是init==============");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("这是dofilter==========================");
HttpServletRequest request=(HttpServletRequest) servletRequest;
HttpServletResponse response=(HttpServletResponse) servletResponse;
String token=request.getHeader("token");
if (ObjectUtils.isEmpty(token)){
token=request.getParameter("token");
}
if (!ObjectUtils.isEmpty(token)){
//判断token是否合法
User user= UserServiceImpl.sessionmap.get(token);
if (user!=null){
filterChain.doFilter(request,response);
}else{
JsonData jsonData=JsonData.buildError(-2,"登陆失败Token无效");
String json=objectMapper.writeValueAsString(jsonData);
renderJson(response,json);
}
}else{
JsonData jsonData=JsonData.buildError(-3,"未登录");
String json=objectMapper.writeValueAsString(jsonData);
renderJson(response,json);
}
}
//工具类返回数据
private void renderJson(HttpServletResponse response,String json){
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
try(PrintWriter printWriter=response.getWriter()){
printWriter.print(json);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void destroy() {
System.out.println("这是destroy============================");
}
}
VideoOrderController:
@RestController
@RequestMapping("/api/v1/pri/order")
public class VideoOrderController {
@RequestMapping("save")
public JsonData saveorder(){
return JsonData.buildSuccess("下单成功");
}
}
效果截图:
1.token失效:
2.没登录(无token)
3.登陆成功后(有有效的token)