java前后端分离使用token_前后端分离:使用spring的Aop实现Token验证

#思考

首先我们的token是在登录后才生成的用于交换信息的凭证,在一个应用中也并不是所有的地方都需要进行token验证,比如:首页,登录页等,而一般用到token验证的都是属于后台管理部分(只是举个大概),那么这就产生了一个问题,我们需要在验证token的时候再验证,不需要的时候就不管。

##解决方案一 :拦截器(不推荐)

下面是springmvc的拦截器代码,我采用的是直接实现的handlerInterceptor接口的形式

public class TokenInterceptor implements HandlerInterceptor{

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

//此处实现拦截逻辑

return true;

}

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,

ModelAndView modelAndView) throws Exception {

}

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)

throws Exception {

}

}

可以想象直接在拦截器实现的话,代码量是很大的,而且耦合程度过高,一般情况下是利用request获取请求uri,然后判断该uri是否需要进行Token验证,要的话进行token验证,根据结果判断是否放行,否则直接放行。 当然我们也可以实现多个拦截器,起一个链式调用的作用,不过我这儿就不在赘述了,因为我们有更好的方案。

##解决方案二:Aop(推荐)

关于Aop,我这儿有一个例子:我们可以想象一个食品工厂对不同的食品进行包装,包装上都会打印生产日期,保质期等,尽管是不同的食品,不同的包装,但是它都会打印这些数据,而我们的Aop也类似这样,不同的代码,我们需要统一处理他们执行前或者执行后的一些逻辑代码,而这些逻辑代码都是一样的,我们就把他们封装起来,利用Aop来减少重复的代码。

回归正题,我们这儿利用Spring本身的aop特性来实现Token验证,采用注解的方式实现。

###定义@Token注解

该注解用于标注需要进行Token验证的方法

/*

*Target指定注解的目标为方法级

*Retention指定注解可以在运行时被获取(利用反射)

*/

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public @interface Token {

}

###实现TokenAspect

实现spring的aop,统一处理token验证

@Aspect

public class TokenAspect{

//pjp参数由spring注入

public Object execute(ProceedingJoinPoint pjp) throws Throwable{

MethodSignature ms = (MethodSignature) pjp.getSignature();

//获取当前正在执行的方法

Method method = ms.getMethod();

//判断该方法是否被注解@Token标记

if(method.isAnnotationPresent(Token.class)){

//执行token验证

}

//继续执行方法

return pjp.proceed();

}

}

###配置spring配置文件

此处配置的时候,如果是使用了spring+springMVC的模式下,需要注意spring和springMVC父子容器的问题,如果我们的@Token是标注于Controller(被@Controller或者@RestController注解标记)层的话,由于controller层是由springMVC容器来管理的,若此时我们的TokenAspect是由Spring来管理的话,由于在方法调用的时候,spring无法获取子容器的管理对象,aop就不起作用,自然@Token注解也就失效了。 所以这儿我们的aop也需要配置再springMVC的配置文件中,由SpringMVC来管理。

####springMVC.xml的Aop配置

##结语 上面我只是列出了个大概,具体的业务代码并没有写出来,关于spring的aop可以百度或者google可以了解其更多的作用,当然平常我们也利用其来实现日志的记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值