spring boot配置拦截器(前后端分离)

就拿登录拦截器做个列子!

1:导包:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/>
</parent>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>

2:创建拦截器:LoginInterceptor

package com.jhzx.foilbillplatform.web.interceptor;

import com.alibaba.fastjson.JSON;
import com.jhzx.foilbillplatform.common.util.FoilResult;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import static com.jhzx.foilbillplatform.common.util.Constants.SESSION_ADMIN;

@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object agentUser = request.getSession().getAttribute(SESSION_ADMIN);
        if(agentUser==null){
            return reLogin(response);
        }
        return true;
    }

    private boolean reLogin(HttpServletResponse response) throws IOException {
        PrintWriter out;
        try{
            FoilResult res = FoilResult.build(201,"用户需要重新登陆","login");
            out = response.getWriter();
            out.append(JSON.toJSONString(res));
            return false;
        } catch (Exception e){
            e.printStackTrace();
            response.sendError(500);
            return false;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

3:配置拦截器:

package com.jhzx.foilbillplatform.web.config;

import com.jhzx.foilbillplatform.web.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)    //spring redis session的配置注解(在这里不用理会);
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    /**
     * 重写添加拦截器方法并添加配置拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**")   //拦截哪些路径("/**":代表拦截所有路径);
                .excludePathPatterns("/login", "/logout","/error","docs.html"); //不拦截哪些路径;
    }
}
注 : 有什么不足望各位朋友评论留言!!!

猜你喜欢

转载自blog.csdn.net/luan666/article/details/80415876