SpringBoot实战-Guns项目

项目导入

  1. zip包下载或git下载(zip下载不带git)

  2. IDEA setting 设置代理(阿里代理)

  3. jar下载目录更换默认目录

  4. 不能识别项目(选中pom.xml 右键 )

  5. 打包成jar包或wav包

从代码生成角度看项目结构(订单 order)

  1. 生成的html文件在WEB-INF对应的模块下(webapp/WEB-INF/view/order)

  2. 生成的js文件static目录下(webapp/static/modular/order/)

  3. bean 在modular/system/modle/Order

  4. 数据操作 xml 及接口在 modular/system/dao/mapping 及上一级目录

  5. 接口的实现类modular/order/service

  6. control(被html调用的增删改查)类 在modular/order/controller


  • 结论

    1. 数据库映射方式采用的mybatis xml方式配置(还有一种是注解)

    2. git远程header怎么移动?TODO

    3. 用的是mybatis-plus (中国人搞的 baomidou)

shiro 权限

  1. Shiro如何获得输入的用户信息:(前后端关系 TODO)

  2. Shiro如何验证用户名密码是否正确:ShiroRealm继承AuthorizingRealm 覆写doGetAuthenticationInfo方法,传入的AuthenticationToken包含用户名和密码,根据用户名查询数据库中完整用户的信息

  3. 如何知道该用户是否有相应的权限进行操作:(1).从数据库读取存储权限:同上覆写doGetAuthorizationInfo,在里面根据用户信息包含的role_id,连表sys_relation 和sys_menu通过menu_id查询出对应的用户拥有权限的url,放入集合。(2)如何判断是否拥有权限:通过Permission注解AOP拦截(Shiro自带有一个),在AOP里面进行判断

  4. session管理:分为单机环境和多机环境,多机环境需要redis进行存储(TODO进一步博客)

  5. cache缓存管理:EhCache,读取xml配置,通过注解@Cache(TODO 进一步博客)

  6. 记住我CookieRememberMeManager

  7. 代码编写ShiroConfig(配置); ShiroRealm(封装与数据库连接细节) ;GunsUserFilter(缓存等过期设置);
    image.png
  8. 扩展阅读https://www.imooc.com/article/3369(session和cookie异同)

日志系统

            1\. 获取时机: 对方法进行BussinessLog注解 ,通过AOP拦截

            2\. 如何保存旧值:日志进行修改或编辑时要保存旧值,在跳转的时候进行值的临时保存(LogObjectHolder)

            3\. 如何获取: LogObjectHolder拿的对象,反射获取属性,进行循环,在循环里拦截http请求参数,进行比较(如果碰到一些不好直观看的的值,例如性别标识,F;M表示男,F表示女,则通过字典进行查询)

            日志分类:登录登出日志;业务日志;异常日志

            核心技术点:1.AOP;2.保存旧值;3.把无意义的字段值映射成可读性强的值;异常统一处理(@ControllerAdvice 异常日志)

分页

MyBatis-Plus里面分装好了limit物理分页 Page注解拦截识别

  1. 物理分页(limit 数量比较大的情况)

  2. 逻辑分页(全部查询,然后进行分页识别)

缓存

用在经常使用,以及key和value每次查询的时候不变

  1. 经常用到的有Echace 和Redis

  2. 注解:

    1. Cacheable : 如果有先取出缓存(select)

    2. CachePut :放入缓存(save)

    3. CacheEvict :删除缓存(update或delete)

    4. Caching:

  3. 注解参数

    1. Cacheable,CachePut :value,缓存名称;key缓存键值 Condition SpEL (方法之前),Usless SpEL(方法之后)

    2. CaheEvict: value;key;Condition SpEL;等

  4. 缓存本地xml配置

  5. 常用的SPEL表达式

    1. args

    2. caches

    3. target

    4. targetClass

    5. method

    6. methodName

    7. result

代码生成器

MyBatis数据拦截器(在不修改查询语句的情况下进行拦截查询。eg.部门查看范围,只能允许查看自己部门或者子部门的数据)

  1. DataScope 数据范围(sql参数)

  2. DataScopeInterceptor拦截

jwt

由服务器产生,当客户端拥有,即拥有了服务器访问的权限

  1. 组成:

    1. header+payload+signature

    2. header

  2. 过程:

    1. 服务端根据用户名密码,生成jwt和key返回给客户端

    2. 客户端把jwt 放入header的Authorization字段里(前面加Bearer ),然后对要传输的数据进行base64加密,最后加上key进行md5加密,形成sign前面,形如({“object”:”base64(objectJson)”,”sign”:”md5(objectJson+key)"})

  3. 几个关键类说明

    1. IRequestValidator:验证身份(比如用户名,密码,验证码等)

    2. AuthCotroller:RequestMapping,对请求进行验证,返回token和randomKey两个字段的json

    3. AuthFilter:对客户端请求的jwt token进行验证过滤

      1. 拿出herader的Bearer字段,根据jwt判断token是否过期
    4. WithSignMessageConverter:对数据进行校验,判断数据有没有被篡改

      1. 取出header Authorization字段,根据该字段拿到key

      2. 取出object字段,并和key md5计算,得到本应该的sign

      3. 和传过来的sign进行比较,如果相等数据没有被篡改,不相等,即数据被篡改了

    5. DataSecurityAction:对数据进行加密(一方面是不可读,另外一方面是保证json字段顺序变化也认为数据篡改)

    6. JwtTokenUtil:jwt常用的工具类

  4. 代码组成

  5. WebConfig(注解Configuration和xml配置相似,相当于导出,可以通过@Autowired),关联AuthFilter和DataSecurity

事务

  1. 事务的四大特性

    1. 原子性:要不全部完成,要不全部失败

    2. 一致性:一旦全部完成或者失败。确保业务处于一致的状态(和原子性相似,着重的是状态)

    3. 隔离性:有多个事务处理同样的数据,每个事务都应该和其他事务隔离开

    4. 持久性:事务本地持久化,无论发生什么样的系统错误,都可以恢复回来

  2. 隔离性详解

    1. 脏读:读取未提交的数据

    2. 不可重复读:一个事务多次查询返回的结果不一致

    3. 幻读:一个事务批量修改表的所有数据,这时候另一个事务往表里增加了一条记录,导致第一个事务修改之后落了一条,就像是产生幻觉一样。

  3. 隔离级别

    1. Serialozable(串行化)都不会发生

    2. Repeatable Read(可重复读)默认,幻读可能发生

    3. Read Commited(读已提交)脏读不会发生

    4. Read uncommitted(读未提交)不能保证

  4. 传播行为(一个事务调用另外一个事务,须指定事务应该如何传播)

    1. REOPAGATION_REQUIRED:

    2. REOPAGATION_SUPPORTS:

    3. REOPAGATION_MANDATORY:

    4. REOPAGATION_REUQIRES_NEW:

    5. REOPAGATION_SUPPORTED:

    6. REOPAGATION_NERVER:

    7. REOPAGATION_NESTED:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容