SpringBoot自定義攔截器

一、安全隱患

由於應用的一些api存在安全隱患,需要處理一下,所以想到了攔截器,先攔截所有api,然後對需要對開放對api單獨放行

二、自定義攔截器


@Component
public class LoginHandlerInterceptor implements HandlerInterceptor {
	String loginUrl = PropertyUtil.getProperty("login");
	
	@Autowired
	private HttpServletRequest httpServletRequest;

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		try {
			MyUser user = PlatformUserUtils.getUser(httpServletRequest);
//			System.err.println("user:"+user);
			if (user == null) {
				System.err.println("用戶未登錄!");
				//未登錄,返回登錄頁面
				response.sendRedirect(loginUrl);
				return false;
			}else {
				System.err.println("登錄人Name:" + user.getName() );
				//放行
				return true;
			}
		} catch (Exception e) {
			System.err.println("用戶未登錄,接口api禁止訪問!");
			response.sendRedirect(loginUrl);
//			e.printStackTrace();
		}
		return false;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub

	}

}

三、配置攔截器配置類


@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
	
	@Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");//允許js跨域
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
//        .excludePathPatterns("/papers/findPapers")
        ;

        super.addInterceptors(registry);
    }
}

  • 其中addInterceptor方法用於把剛纔創建的攔截器加入到registry中,
  • addPathPatterns用戶加入所要攔截的url,/**表示攔截所有請求。
  • excludePathPatterns添加不需要攔截的請求。
     至此,一個攔截器就配置好了。如果需要配置多個攔截,只需要另外創建一個自定義攔截器,給registry再加一個inteceptor就可以了,不用再創建一個新的config配置類。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章