自定义“是否登录验证”注解-------springboot实现

前言:

最近在给训练营团队整合springboot框架的时候,突发奇想,幻想着让自己的功能尽量用最少的代码实现更多功能。

在规划登录拦截器的模块时,想起了用注解可以实现少写代码,并且让开发变得更方便,更简洁;加下来就阐述一下我的程序流程图:

登录拦截器实现HandlerInterceptorAdapter接口,并且重写preHandle方法,在里面编写拦截器,代码如下:

public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		String  ticket= request.getSession().getAttribute("userTicket")==null?null: request.getSession().getAttribute("userTicket").toString();
		if(!StringUtils.isEmpty(ticket)){
			 return true;
		}
		if(!handler.getClass().isAssignableFrom(HandlerMethod.class)){
			return true;
		}
		HandlerMethod handlerMethod = (HandlerMethod) handler;
		final Method method = handlerMethod.getMethod();
		final Class<?> clazz = method.getDeclaringClass();
		if(clazz.isAnnotationPresent(ToAuth.class) || method.isAnnotationPresent(ToAuth.class)){
			if(StringUtils.isEmpty(request.getAttribute(Constants.USER_SESSION_KEY))){
				logger.info("用户尚未登录,即将跳转到登录页面");
				response.sendRedirect(request.getContextPath() + "/login");
				return false;
			}else{
				return true;
			}
		}else{
			logger.info(request.getRequestURI()+"接口免登录");
		}
		return true;
	}

以上的代码就实现了对接口的拦截,接下来展示一下ToAuth注解的代码:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface ToAuth {
	

}

以上的代码就定义了一个名称为ToAuth的注解,该注解可以用在类和方法下,如果用在类,那就说明该类下的所有方法都需要登录才能调用,如果用在方法,说明该方法需要登录才能调用。

接下来需要写一个MVC的配置java类,把拦截器加载进去,一下是配置文件加载拦截器的代码

...	
@Autowired
	LoginOperInterceptor loginOperInterceptor;
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(loginOperInterceptor).addPathPatterns("/**");
	}
...

最后,自定义注解的调用方式吧

演示:

以下是不声明@ToAuth的效果

以下是声明@ToAuth的效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值