单机版项目配置原创
# 项目集成
本章介绍单机版权限 (opens new window)项目配置,主要步骤如下:
注意
项目请使用 maven 3.6.x
版本构建!
- 创建数据库
snapper
,导入SQL 脚本snapper-x.y.z.sql
(x.y.z为版本号) - 下载依赖项目snapper-dependence (opens new window),执行
mvn clean install
- 下载snapper-standalone (opens new window)单机版项目
- 修改项目下的envs/env-dev.properties(默认的生效配置文件在pom.xml中)的数据库信息 缓存信息,具体参考属性配置
- 启动项目 打开SnapperServerBootstrap调试模式启动
- 下载snam (opens new window),配置proxy.js
dev: {
'/authority/': {
target: 'http://127.0.0.1:8090/',
changeOrigin: true,
pathRewrite: {
'authority': ''
}
}
}
- 打开浏览器访问 http://localhost:8000, 输入用户名密码 ximen/123456
# 内存模式配置
为减少依赖,单机版项目支持基于内存caffeine模式的缓存,可在env-dev.properties中配置snapper.cache.mode=caffeine
来实现
# 打印日志
- 业务日志 @ULog,在Controller方法上添加 @ULog(建议只添加持久化方法)以支持业务日志,业务日志会异步的方式添加到数据库中,可在UI中的日志管理查看,请设置bootstrap.yml中的
snapper.ulog=true
- 系统日志 调试模式下,可查看控制台日志,请设置env-dev.properties中的
snapper.log.level
日志级别及snapper.log.impl
实现类,其中StdOutImpl
为控制台打印日志,LogbackLoggerImpl
会打印日志到日志文件,具体参考snapper-denpendence中的snapper-log-starter中的logback-base.xml
# 系统上下文
在访问Controller时前系统会注入上下文信息,上下文信息包含如下:
- 请求上下文 该请求的信息,具体参考
RequestContext
,包含当前请求的IP URL 浏览器 操作系统等信息 - 用户上下文 当前用户信息,具体参考
UserContext
,也是权限系统的关键,包含当前用户的用户名 组织 系统端 用户Tag 角色等信息,可以MbaseController
及服务层ContextServiceImpl
获取
# 统一返回
系统集成了统一返回处理,返回结果格式为:
{code:200,message:'ok',data:[{}]}
具体参考com.baomibing.web.common.R.class
,在env-dev.properties中配置snapper.wrap.package=com.xxx
包名,包名下的返回会自动封装统一返回结果.
统一返回结果有以下规则:
- private方法不进行统一返回结果封装
- @NotWrap注解的方法不进行统一返回结果封装
- 不在
snapper.wrap.package
配置的包下的Controller方法不进行统一返回结果封装 - 返回
com.baomibing.web.common.R.class
的结果不进行统一返回结果封装 - 返回
ModelAndView
的结果不进行统一返回结果封装
# 异常处理
系统提供了统一的异常处理, 异常处理后会被封装为统一返回进行结果返回(参考com.baomibing.security.exception.AuthorityWebExceptionHandler
),code不为200,自定义异常处理按照如下步骤:
- 自定义异常枚举类实现
ExceptionEnumable
接口,该接口提供了国际化异常处理支持 - 在自定义的异常枚举中定义异常,参考的例子为
CLASS_NAME_DUPLICATE(30002, "商品分类名称{0}重复,无法进行后续操作!")
,30002为异常码,后面为异常内容,其中{0}为占位符 - 抛异常时按照如下格式
throw new ServerRuntimeException(WmsExceptionEnum.CLASS_NAME_DUPLICATE, v.getClassName())
# 登录鉴权
系统登录鉴权基于Spring Security实现,具体如下:
- 每个登录用户必须指定"端",即登录设备,根据用户的配置从而判断用户是否支持该设备
- 业务系统可能存在一个用户位于多个组织的情形,对于业务端,登录时需要指定组织(如果登录用户有多个组织,只有一个组织,默认会选择该组织)
- 系统提供验证码支持,具体请参考
com.baomibing.authority.controlle.ASystemController
实现方法Boolean validateCaptcha(String captcha)
方法 - 登录支持多人同时登录和单一登录,具体可在用户管理中配置
- token登录拥有过期策略,策略包含固定时间(从登录开始到固定的时间后过期)和最后一次访问(从最后一次调用后台开始到固定时间后过期),具体可在用户管理中配置
具体登录鉴权过程如下:
完整的登录鉴权 认证过程如下:
# 属性配置
# config配置文件清单
本段介绍config文件下的配置文件信息(只介绍系统特有的),具体配置文件清单如下:
# MvcConfigurer 配置
属性 | 说明 |
---|---|
ContextHandlerInterceptor | Controller拦截器,用于拦截Controller注入User上下文对象,及用于支持@ULog注解 上下文信息 |
ReturnHandlerAdvice | 同意返回拦截器,用于统一返回结果 |
AuthorityWebExceptionHandler | 异常处理拦截器,用于统一异常处理 |
AuthorityWebMvcConfigurer | 配置拦截器 |
# SecurityConfiguration 安全配置
属性 | 说明 |
---|---|
CommonJwtAuthenticationFilter | Jwt登录认证过滤器 |
JwtAuthorizationFilter | Jwt鉴权过滤器 |
CommonBlackFilter | 黑名单过滤器 |
RateLimitFilter | 流量控制过滤器 |
ThirdPartAuthenticationFilter | 自定义第三方鉴权过滤器 |
CommonCrosFilter | 跨域拦截器 |
SystemService | 系统登录实现类 |
AuthorizationCacheWarmUpRunner | 系统启动缓存预热 |
# WrapFilterConfiguration 配置
属性 | 说明 |
---|---|
multiRequestFilter | 是否开启多请求过滤器,防止每个请求只能读取一次参数 |
XssFilter | XSS过滤器 |