- 发表于 2016-1-25 19:29

申请会员ID:fls119



1、申 请 I D:fls119
2、个人邮箱:2871710618@qq.com
3、原创技术文章:

                           REST API 基于ACCESS TOKEN 的权限解决方案   


REST 设计原则是statelessness的,而且但客户端是APP时,从APP发起的请求,不是基于bowers,无法带相同的sessionid,所以比较好的方案是每次请求都带一个accesstoken进行验证。然后后台是根据token 找到用户,然后找到用户资源但总不能每个方法都去调用token验证的方法,也不能每次验证都需要查询数据库吧!解决办法:
[*]为了业务层只关注业务,所以需要把token验证的方法在进入controller前集中处理,用 Interceptor实现
[*]由于根据token获得用户,只需要用到 用户ID,用户登录名等 不会改变的信息,用缓存实现,需要支持过期失效,ConcurrentHashMap没有过期失效的功能,自己懒得实现就用ehcache
[*]集中处理token   interceptor实现:

[*]


[*]

[*]然后到spring配置文件中加上这个拦截器:
[*]

[*]{:1_916:}

[*]缓存处理pom.xml中加入ehcache包:(spring集成ehcache ,需要spring-context和spring-context-support)
[*]

[*]
[*]加入ehcache.xml,大部分都是默认,参考springside里面说的,改了updateCheck="false",
[*]

[*]


开启缓存,在spring配置文件中加入:





对verifyAccessToken 方法做缓存处理,也就是在原有方法上加Cacheable注解:





开始run出现 java.io.NotSerializableException: cn.ifengkou.athena.model.User
User 实现序列化,再试:前端请求三次的日志,可以看到verifyAccessToken只执行了一次
如有token无效,查出来User为null,cache 把null也缓存起来了
keywords:REST,accesstoken,权限,spring,ehcache,interceptor

















Hmily 发表于 2016-2-2 15:48

看起来是从转载过来的,原创吗?

Sp4ce 发表于 2016-2-3 16:28

抄的不全啊http://www.cnblogs.com/sloong/p/5157654.html
页: [1]
查看完整版本: 申请会员ID:fls119