Spring Session allows providing session ids in headers to work with RESTful APIs

Spring Session allows providing session ids in headers to work with RESTful APIs

想要用SpringMVC开发一个RestAPI应用,用户登录保持登录“状态”,是个问题,以前用php Laravel 用过 lucadegasperi/oauth2-server-laravel在Laravel上是个不错的框架,几条命令自动导入lib的自带数据库,几行代码配置就可以用了,现在Shiro+OAuth+Rest没有找到类似的解决方案。

oauth2-server-laravel 认证返回信息

    {
          "access_token": "A60mGsz6yKhaMvmRj1ybVzyRxa1RgXXF87RwwVcP",
          "token_type": "Bearer",
          "expires_in": 3600,
          "refresh_token": "Ij9Kysu4b4aepH4JPmxM7C2MMRnzqX6SuGzUYkMv"
    }

看了跟我学Shiro的博客教程Github,中有一个Stateless的API应用范例,还是不够满意,因为没有了“状态”,因为Rest本就是无状态应用,但是没有状态,就没法使用安全框架的权限验证,灵活性可拓展性大大减弱,自定义filter解决,完全不能跟有状态的情况下的安全框架相比。因此我才想通过把Session保存到数据库,并自定义过期时间,在filter上通过获取header上的指定Session ID 字段值,来重新设置Session ID来实现,RestAPI的有“状态”,(浏览器服务器的默认Session实现是采用cookie实现,如果在Rest客户端实现cookie,cookie会破坏整体风格),但是在Google上搜的时候,发现了,原来Spring也想到了这个问题,并且提供了解决方案,SpringSession就是解决方案,SpringSession,

## Spring Session allows providing session ids in headers to work with RESTful APIs

解决方案官方文档

事后发现,SpringSession和Shiro结合非常麻烦,Shiro自带sessionManager负责创建Session存储Session,而SpringSession 本身也有这部分功能,从header中获取x-auth-token 作为session只是个附加的拓展功能。 但是,找到了Spring Security Spring OAuth的解决方案。 Spring Security+OAuth的解决方案太复杂了,也没有找到像样的开源Sample,中途发现了个简单的解决方案,Spring Security+Http Basic.spring security two security realms in one application,本来Spring Security就不会,加上Spring Security OAuth2 就更看不懂了,先弄会Spring Security再说。未完待续。。。

Related Article