springMvc基于注解登录拦截器
先定义一个拦截器注解
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface LoginRequired { }
在定义一个拦截器,下面的逻辑也可以根据业务反着来,比如注解名叫做NoAuthLogin,有次注解的就不校验,没有就都需要校验
/** * 登录拦截器 */ public class LoginInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { LoginRequired loginRequired = findAnnotation((HandlerMethod) handler, LoginRequired.class); //没有声明需要权限,或者声明不验证权限 if(loginRequired==null){ return true; }else{ String token=request.getHeader("token"); if(StringUtils.isEmpty(token)){ token=request.getParameter("token"); } //在这里实现自己的权限验证逻辑 if(!StringUtils.isEmpty(token)){//如果验证成功返回true(这里直接写false来模拟验证失败的处理) return true; }else{//如果验证失败 response.getWriter().write("您还未登录"); return false; } } }else{ return true; } } private <T extends Annotation> T findAnnotation(HandlerMethod handler, Class<T> annotationType) { T annotation = handler.getBeanType().getAnnotation(annotationType); if (annotation != null) return annotation; return handler.getMethodAnnotation(annotationType); } }
方式1:springboot 配置,新建一个BeanConfig,内容如下,package需要扫描到
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 BeanConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**"); } }
方式2:spring xml配置
<!-- spring 3.1版本后才支持拦截方法名,需要引入一下配置 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
<mvc:annotation-driven />
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.xxx.xxxx.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors>
Controller层数直接使用
@ResponseBody @RequestMapping(value="",method=RequestMethod.GET) @LoginRequired protected Map<String,Object> index(){ return null; }
分享一个淘宝、京东、拼多多、饿了么、美团、抖音等等买东西后真实返钱小技巧,
打车、外卖领券,充值话费95折好像也可以
使用教程用微信扫下方二维码查看详细说明
![](https://img2023.cnblogs.com/blog/1127940/202306/1127940-20230614113052106-1557464839.jpg)