# lf_server **Repository Path**: chopperLiu/lf_server ## Basic Information - **Project Name**: lf_server - **Description**: 专门用于暴露接口,供外部项目访问,从而实现前后台分开的功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-10-22 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # lf_server Swagger2 # 入门:https://gumutianqi1.gitbooks.io/specification-doc/content/tools-doc/spring-boot-swagger2-guide.html JMS and activemq消息队列 Elasticsearch 使用 菜单防止重复提交 (1)权限管控和处理 登录权限采用JwtAuthcFilter进行拦截,解析Jwt, 权限采用shiro注释的形式,RestfulPermissionFilter暂时弃用,因为不够灵活,已经注释掉 (2)org.apache.shiro.subject.support.DisabledSessionException: 如果禁用session,那么就要在jsp页面禁用session,否则就会DisabledSessionException错误 在jsp页面的头部加:<%@ page contentType="text/html;charset=UTF-8" session ="false" %> 在默认情况下,在对一个JSP页面发出请求时,如果session还没有建立,JSP页面会自动为请求建立一个session对象 (3)异常处理 @ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常 https://blog.csdn.net/goodyuedandan/article/details/84026702 理解里面的思想 (4) 缓存 系统中缓存使用的是redis,权限验证使用JWT+shiro,不保存Session,在整个过程中一定要注意禁用session, 例如:jsp页面会使用session,在jsp页面要禁用session,shiro要禁用localStorageSession等 (5) 日志管理AOP切面 https://www.jb51.net/article/145917.htm 记录操作日志信息,信息更改的时候数据前后变化 (6)数据校验hibernate 分组进行数据校验已经成功InsertValidator 新增验证的字段, UpdateValidator 更新验证的字段 (7)声明式事务和注释性事物 本系统采用申明式事务和注释型事务结合的方式,申明式事务主要控制查询,注释型事务主要控制增删改功能 #### 项目介绍 专门用于暴露接口,供外部项目访问,从而实现前后台分开的功能 #### 软件架构 软件架构说明 #### 安装教程 ## MyBatis3.4.0以上的分页插件错误:Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.stateme 错误: Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.statement.StatementHandler.prepare(java.sql.Connection)] with root cause 问题解决: 其实这个是版本更新之后,官方取消了这个函数,转而升级了两个参数的方法,改动如下: @Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class, Integer.class }) }) ## HMAC :是基于散列的消息认证码(Hash-based MessageAuthentication Code)。 ## java实体转json忽略属性 ### 知识点介绍 一、缓存(内存缓存) 1、cacheManager是用来管理多个cache组件的,对缓存的CRUD操作是在cache组件中进行的,每个缓存组件有自己唯一的一个名字 2、@Cacheable理解几个属性: *cacheNames/value:指定缓存组件的名字,缓存组件中保存多个(key-value数据) *key:用它来指定缓存数据使用的key,key默认使用缓存参数的值,value方法的返回值 *keyGenerator:key的生成器,可以自己指定key的生成器的组件Id,key/keyGeneratora属性二选一 *cacheManager/cacheResolver:指定缓存管理器/缓存解析器 两者的效果是一样的 *condition:指定符合条件的情况才缓存,例如:condition="#id>0"才缓存 *unless:否定缓存,当unless指定的条件为true,方法的返回值就不会进行缓存,可以获取到结果进行判断 * unless = "#result == null"就不进行缓存 *sync:缓存是否使用异步模式 *运行时机: @Cacheable标注的方法执行之前先来检查缓存中有没有这个数据,默认按照参数的值作为key去查询缓存 如果没有就运行方法并将结果放入缓存,以后再来调用就直接使用缓存中的数据 /*@Cacheable(cacheManager = "redisCacheManager",cacheNames="lf_server_user",key="'user_'+#loginName",unless="#result == null")*/ 3、@CachePut :既调用方法,有更新缓存数据, * 修改了数据库的某个数据,同时更新缓存 * 运行时机: * 1、先调用目标方法 * 2、将目标方法的结果缓存起来 * 他的属性和@Cacheable相同,但是如果要同步更新以前缓存的结果,必须两者的Key完全相同 @CachePut(cacheManager = "redisCacheManager",cacheNames="lf_server_user",key="'user_'+#user.loginName") 4、@CacheEvict缓存清除 * 默认运行时机: * 1、先调用目标方法 * 2、根据key删除缓存中数据 * 属性:部分属性和@Cacheable相同,用法也相同 * allEntries:清除指定缓存组件中的所有数据,默认是false * beforeInvocation:默认是false,默认是在方法执行之后执行,如果方法在执行的过程中出现异常,缓存就不会被清除 * true:表示在方法执行之前执行 @CacheEvict(cacheManager = "redisCacheManager",cacheNames="lf_server_user",key="'user_'+#user.loginName") 5、Redis缓存的原理: (1)、cacheManager是用来管理多个cache组件的,对缓存的CRUD操作是在cache组件中进行的,每个缓存组件有自己唯一的一个名字 (2)、通过spring-data-redis和jedis整合spring-jedis.xml,容器中保存的是:redisCacheManager,redisCacheManager帮我们创建的RedisCache 来作为缓存组件,RedisCache通过操作redis来缓存数据 https://blog.csdn.net/zxc19854/article/details/82869102 https://blog.csdn.net/weixin_37012881/article/details/80000765 https://blog.51cto.com/ylcodes01/1937131 https://blog.csdn.net/qq_39897814/article/details/86991991 https://blog.csdn.net/qq_18800463/article/details/79957348 6、jvm分析工具---JProfiler9.2使用说明 : https://blog.csdn.net/sinat_38259539/article/details/71023582 7、自定义mysql sequence : http://kchu.me/2015/08/14/MySQL%E5%AE%9E%E7%8E%B0Sequence%E5%8F%8A%E6%95%88%E7%8E%87%E5%AF%B9%E6%AF%94/ 8、CDN加速获取真实IP:https://blog.csdn.net/joeyon1985/article/details/47253719 9、高并发:https://www.cnblogs.com/xjnotxj/p/5516611.html # 10 # 10.1 linux 配置暗转java https://www.cnblogs.com/sxdcgaq8080/p/7492426.html # 10.2 CentOS7 64位安装mysql教程,亲测完美 https://blog.csdn.net/u014793102/article/details/87785583 https://blog.csdn.net/a774630093/article/details/79270080 mysql表名区分大小写 https://www.cnblogs.com/jun1019/p/7073227.html centos 查询mysql配置文件位置 https://www.cnblogs.com/chenkeyu/p/8416736.html https://www.jianshu.com/p/bf2e2fea2109 # 10.3 安装tomcat https://www.cnblogs.com/wishwzp/p/7113410.html # 10.4 安装nginx(在防火墙上打开指定端口这里面没有) https://www.cnblogs.com/kaid/p/7640723.html # 10.5 安装redis https://www.cnblogs.com/renzhicai/p/7773080.html # 微信公众号开发 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login ## 微信公众号配置 --关于微信公众平台本地测试ip如何加入IP白名单 https://blog.csdn.net/qq_26626113/article/details/78251932?fps=1&locationNum=2 # Java开发微信公众号(一)---初识微信公众号以及环境搭建 https://www.cnblogs.com/liuhongfeng/p/4586333.html https://blog.csdn.net/a1786223749/article/details/80787379#_11 https://www.cnblogs.com/han108/p/9596415.html https://blog.csdn.net/cs_hnu_scw/article/details/79103129 https://www.cnblogs.com/han108/p/9603983.html https://www.cnblogs.com/han108/p/9596415.html https://www.cnblogs.com/liuhongfeng/p/4586333.html #微信公众号值授权登录 https://www.cnblogs.com/hero123/p/9010506.html https://blog.csdn.net/belalds/article/details/86536370 https://blog.csdn.net/wangpf2011/article/details/78498021 https://www.jianshu.com/p/7bbf53973fad https://blog.csdn.net/bthinker/article/details/81153686 https://blog.csdn.net/liaohaojian/article/details/70175835 #微信公众号自定义分享功能 https://www.cnblogs.com/liuhongfeng/p/5101561.html https://blog.csdn.net/weixin_38666555/article/details/82835087 https://www.yudouyudou.com/jiaochengheji/wangzhanjianshe/1237.html https://segmentfault.com/q/1010000002520634 #微信公众号支付 https://www.cnblogs.com/gopark/p/9394951.html https://hellojava.cc/article/341 https://www.jianshu.com/p/762e17b65672 https://www.jianshu.com/p/2b5e3b67c9ff https://blog.csdn.net/weixin_39414369/article/details/81289191 https://blog.csdn.net/u012131769/article/details/52669988 10、mysql调试工具安装和使用 https://blog.csdn.net/lidan3959/article/details/17613779 https://www.jb51.net/database/625320.html https://blog.csdn.net/zhanghongzheng3213/article/details/51462113 ##declare为对变量进行声明,声明必须制定变量的数据类型,只能写在过程的前面 set是对变量赋值,可以放在过程的任何地方 对没有declare声明过的变量赋值,该变量必须以加上@号,否则会报错 DECLARE a INT; -- 如果放在下面语句之后,会报错 SET a = (SELECT id FROM tb); -- 如果没有前面的声明,会报错 SET @b = (SELECT title FROM tb); mysql存储过程问题 https://blog.csdn.net/qq_37267706/article/details/79679262 https://blog.csdn.net/hyhanyu/article/details/80997186