springboot 中的拦截器

为了保护后台提供给前台接口在权限范围内调用,特增加拦截器,用来判断用户是否登录,登陆后才能正常调用接口,否则禁止请求。

 1、新增拦截器类

package com.zzstxx.configurer;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.zzstxx.api.login.AuthLogin;
import com.zzstxx.api.models.system.UserInfo;

import net.sf.json.JSONObject;

@Component
public class LoginHandlerInterceptor implements HandlerInterceptor {

	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub

	}

	/**
	 * 用户登录验证拦截器
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
		UserInfo userInfo = AuthLogin.getUser(request.getSession());
		if(null==userInfo){
			JSONObject jo = new JSONObject();
			jo.put("code","-1");
			jo.put("message","springboot loginHandlerintercepter;not found user session,please login!");
			response.getWriter().write(jo.toString());
			return false;
		}
		return true;
	}

}

2、注册拦截器
 

package com.zzstxx.configurer;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfigurer implements WebMvcConfigurer {

	@Autowired
	private LoginHandlerInterceptor loginHandlerInterceptor;


	/**
	 * 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(loginHandlerInterceptor)
		 //拦截所有请求
		.addPathPatterns("/**")
		//排除登陆和注册
		.excludePathPatterns("/mobile/login.json",//密码登陆
				"/mobile/loginBySmsCode.json",//手机验证码登陆
				"/mobile/userInfo.json" //获取用户信息
				); 

	}

	/**
	 * 这个方法是用来配置静态资源的,比如html,js,css,等等
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry arg0) {
		// TODO Auto-generated method stub

	}

}

3、前台接口如果请求超时或者请求不到后的处理方式:

//session 获取用户信息
      getUserBySession(){
        var self = this;
        self.$http({
          method: 'post',
          url: this.config.serverUrl + '/mobile/userInfo.json',
          data:{}
        }).then(function (response) {
          if(response.data.code==="-1"){
            self.$Notice.info({
              desc: "暂未获取用户信息,请登录后访问!",
              duration: 8
            });
            setTimeout(function(){
              self.$router.push("/");
            },1500);
          }
        }).catch(function (error) {
          if (error.response) {
            if(error.response.status!=200){
              self.$Message.info("请求接口失败或获取用户信息失败!");
              self.$router.push("/");
            }
          }
        })
      }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot允许我们自定义拦截器来拦截请求并进行一些逻辑处理。下面是SpringBoot自定义拦截器的步骤: 1.创建一个拦截器类并实现HandlerInterceptor接口,该接口有三个方法:preHandle、postHandle和afterCompletion。其preHandle方法在请求处理之前被调用,postHandle方法在请求处理之后被调用,afterCompletion方法在视图渲染之后被调用。 2.在拦截器类上使用@Component注解将其注入到Spring容器。 3.创建一个配置类并实现WebMvcConfigurer接口,该接口有一个addInterceptors方法,可以用来添加自定义拦截器。 4.在addInterceptors方法添加自定义拦截器,并指定拦截的路径。 下面是一个简单的示例: 1.创建一个拦截器类并实现HandlerInterceptor接口: ```java @Component public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行逻辑处理 // 如果返回false,则请求不会被处理 return true; } } ``` 2.创建一个配置类并实现WebMvcConfigurer接口: ```java @Configuration public class MyWebMvcConfigurer implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { // 添加自定义拦截器,并指定拦截路径 registry.addInterceptor(myInterceptor).addPathPatterns("/**"); } } ``` 在上面的示例,我们创建了一个名为MyInterceptor的拦截器类,并将其注入到Spring容器。然后,我们创建了一个名为MyWebMvcConfigurer的配置类,并在其添加了我们的自定义拦截器,并指定了拦截的路径为“/**”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值