前后端分离--基于SpringBoot集成Shiro安全验证

Shiro工作原理是服务端将SessionID写入客户端浏览器的cookie中,客户端发起请求时携带cookie信息,服务端从cookie中读取sessionId,以此来维持会话。但是在前后端分离模式下,我们的后端服务不能将sessionId写到请求浏览器cookie中,而且存在跨域问题,基于安全方面原因,ajax请求也都不带cookie信息,后端程序没办法取得sessionId,也就无法验证登录。

 

实现思路:将SessionID返回前端做保存(写入cookie或localStage中),然后前端发起请求的时候,将Sessionid传给服务器,服务器获取这个SessionID,再取对应的session

  后台登录接口,需要将ShiroSession的SessionId返回给前端,前端保存到cookie中,

登录成功后,前端JS中接收sessionID(token),并保存到cookie中,

第一,修改Shiro安全配置,重写SessionManager类,创建一个MySessionManager类继承DefaultWebSessionManager类,重写getSessionId方法,先从cookie获取SessionID,取不到再从requestHeader中获取,如取不到再从请求参数中获取

 第二,修改Shiro配置中的session管理类,配置为我们的MySessionManager类,这里用到了redis作为缓存管理器,

第三,在项目中添加一个过滤器类CrosFilter,处理跨域问题,其中,OPTIONS预处理请求,要返回200,表示成功,否则ajax发起post,get等请求,服务器不能响应。另外,Access-Control-Allow-Headers配置项中,要设置Authorization,而且,Access-Control-Allow-Credentials 要设置成true.

-最后,前端ajax发起请求时,需要添加请求头信息,requestHeader添加Authorization项,值为登录时返回的sessionID($.cookie("token")),设置crossDomain为true。最后,前端ajax发起请求时,需要添加请求头信息,requestHeader添加Authorization项,值为登录时返回的sessionID($.cookie("token")),设置crossDomain为true。

 

SpringBoot前后端分离API接口怎么保证API接口的安全性?

前端用vue写的,直接放在nginx下面后端使用SpringBoot作为服务端提供API接口给前端访问,

前端分为公共访问页面和登录后访问页面。登录后访问的可以使用JWT进行接口鉴权。但是没有登录的情况如何保护接口不被恶意的调用?通过请求request来获取ip.记录ip请求次数到redis缓存.当ip请求频率过高时,屏蔽该ip