有的时候,我们要对接口进行管理,确定登录,然后就有了如下案例
继承
HandlerInterceptorAdapter抽象类进行接口鉴权
若接口不满意还可以选择如下接口
(HandlerInterceptorAdapter--->AsyncHandlerInterceptor--->HandlerInterceptor)
案例代码
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
System.out.println("OK.....");
}
}
配置类
import com.example.demo2.Controller.AuthorizationInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加路径
registry.addInterceptor(new AuthorizationInterceptor()).addPathPatterns("/test/**");
registry.addInterceptor(new AuthorizationInterceptor()).addPathPatterns("/test2/**");
//排除路径
registry.addInterceptor(new AuthorizationInterceptor()).excludePathPatterns("/api/login");
}
}
鉴权处理类(这里仅仅是判定UA长度进行判定,请自行替换)
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) {
return true;
} else {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
String userAgent = request.getHeader("User-Agent");
Boolean hasToken = false;
if (userAgent!=null&& userAgent.length()>20){
hasToken=true;
}
System.out.println("-------------------");
if ((method.getAnnotation(Authorization.class) != null || handlerMethod.getBeanType().getAnnotation(Authorization.class) != null) && !hasToken) {
System.out.println("鉴权失败");
return false;
} else {
System.out.println("鉴权成功");
return true;
}
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
System.out.println("结束");
}
}
注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Authorization {
}
控制层
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController1 {
@GetMapping(value = "/1")
public String getInfo() {
return "gatherLoginInfo";
}
@Authorization
@GetMapping(value = "/2")
public String getInfo2() {
return "gatherLoginInfo";
}
}