Spring Boot整合Shiro实现前后端分离
Apache Shiro是Java的一个安全框架。功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案。
Shiro基本功能点如下所示:
Shiro工作流程如下所示:
Shiro内部架构如下所示:
本文实现源码如下,欢迎Star和Fork。
实现思路:用户登录时生成token信息,设置过期时间,使用Redis存储。前端调用接口时将token作为参数传给服务端,服务端根据token信息认证用户。
自定义AuthFilter过滤器,继承AuthenticatingFilter重写createToken、isAccessAllowed、onAccessDenied、onLoginFailure方法。
AuthenticatingFilte类executeLogin方法如下所示:
用户登录时删除旧Token信息,重新生成Token信息,退出登录时删除Token信息。 使用Redis存储Token信息时,同时存储已用户ID为键,Token为值和已Token为键、用户ID为值的信息 。
整体实现流程图如下所示, 图源来自参考链接一,侵删 。
实现思路:自定义ModularRealmAuthenticator管理多Realm,结合自定义认证Token关联不同的Realm。
SecurityManager和ModularRealmAuthenticator配置如下:
自定义认证Token,重写getCredentials方法, 根据loginType返回不同的比较对象 。
普通登陆Realm认证逻辑如下所示:
Token关联的Realm认证逻辑如下所示:
自定义ModularRealmAuthenticator,管理多Realm,实现逻辑如下所示:
用户登录,返回生成的token信息:
用户携带token信息查询文章( 有对应权限 ):
用户携带token信息删除用户( 无权限 ):
用户携带token信息退出登录:
用户退出登录后携带原token信息删除用户:
springboot 前后端分离跨域方案 ProxyServlet配置
针对前后端分离场景下的一种跨域方案,如果不使用如nginx或者springboot的zuul网关等方案,可以采用 httpproxy 方案。
配置说明:
servlet_url : 对外可以访问的匹配路径,如前端js 在web服务访问后端服务的一个接口,可以不加域名或者ip port;
target_url : 指向后端服务的根服务地址。
更多,请关注:
springboot 技术实践总结
(Docker Nginx) Spring boot+Vue 前后端分离部署 详细完整版
简述:Spring boot+Vue 前后端分离项目部署,主要采用docker容器部署方式。
Springboot项目部署:docker构建mysql环境+docker构建项目自身环境。
Vue项目:使用docker启动nginx服务器方式代理部署。
项目使用mysql8.0作为数据源,所以部署时需要使用docker构建mysql环境及项目自身环境。
连接出现1251错误时:
首先将项目进行打包:mumu-0.0.1-SNAPSHOT.jar
到此,springboot项目采用docker方式运行部署结束。
使用docker容器方式运行nginx服务器。
对于nginx服务器,重要的两个操作是:
所以我们在配置启动nginx容器的时候,需要将对应的目录及文件进行宿主机挂载,方便后续更新资源及操作
启动命令:
springboot国际化(前后端分离情况)
spring.messages.basename=messages/messages
其中if else部分可以省略,看前端传的情况,前端如果传送header中的Accept-Language是en,zh,ja这样的简写,就需要补全,如果前端传过来的就是en-US,zh-CN,这样的就不需要if,else转换。
当然也可以不用messageSource用ResourceBundle :
messages.properties中的是默认的,如果语言取不到就取默认的。
messages_zh_CN.properties是中文的配置:
messages_en_US.properties是英文配置:
比如切换语言的多选框:
具体方法:
则jquery调用可以是这样:
其中 headers:{ 'Accept-Language':localStorage.getItem('lang')||'en' }, 这个就是根据你切换的语言,传给服务端对应的语言,这样就做到前后端同步。