Java 日期总结
java 日期操作
1 | //java8 |
1 | //java8 |
1 | @Autowired |
reids重新设值会覆盖expireAt过期时间的设置
创建redis挂载目录/dockerdata/v-redis
并在该目录vim redis.conf新建配置文件,配置文件添加如下内容
1 | requirepass <登陆密码,最好64位以上> |
编辑vim stack-redis.yml,内容如下
1 | version: '3' |
运行启动docker stack deploy -c stack-redis.yml redis
测试命令
1 | #本地直接redis-cli不需要任何参数 |
添加pom.xml依赖
1 | <dependency> |
编辑application.yml添加redis连接信息
1 | spring: |
编写测试类
1 | @Autowired |
添加配置文件
1 | @Configuration |
在WebSecurityConfig extends WebSecurityConfigurerAdapter类里面添加
1 | @Bean |
1 | /data/tomcat/bin/catalina.sh version |
添加
1 | <filter> |
err:
1 | Access to XMLHttpRequest at 'http://192.168.101.210:8005/fun/login.do?loginName=admin&pwd=a123456&yzm=2giu&userType=1' from origin 'http://127.0.0.1:32768' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. |
其中from origin后面的地址设置到cors.allowed.origins,多个地址,分割
问题:这个经测试,发现option一直提示跨域
新建一个CorsFilter类
1 | package com.xxx.controller.filter; |
然后在src\main\webapp\WEB-INF\web.xml里配置,配成第一个过滤器
1 | <filter> |
这个和tomcat不能同时配置,会导致同时设置两个跨域地址
chrome console输入
1 | var xhr = new XMLHttpRequest(); |
在network查看结果
thymelef模版配置,可以不用配置
1 | spring: |
thymelef添加依赖
1 | <dependency> |
在resource/templates添加网页
${error}接收参数,th:action="@{/userLogin}"表单提交地址
1 | <p th:if="${error}" class="bg-danger" th:text="${error}"></p> |
添加controller
1 | @Controller |
直接复制到resource/static资源目录即可
layui简单的post请求
1 | <button class="layui-btn" lay-submit="" lay-filter="addsort">增加</button> |
表单数据加载
1 | @RequestMapping(value = "/feedback") |
1 | <table class="layui-table"> |
含文件图片的表单混合一起提交,原理首先使用layui绑定按钮提交
上传图片按钮设置不自动 auto: false提交,然后存到文件里,然后表单提交的时候触发图片上传,以及绑定表单参数,设计时最好避免一起提交,设计可以先传好图片,然后填图片地址,分两次请求
1 | <script> |
1 | @PostMapping("/uploadpaper") |
动态读取下拉框
1 | <select name="sortid" id="sortid"> |
1 | @RequestMapping(value = "/addwallpaper") |
@CrossOrigin 跨域处理
springboot集成jackson工具
简单使用
1 | //忽略编译该参数为json |
是一个安全认证权限控制等spring框架依赖注入原理(ioc)
添加maven依赖
1 | <dependency> |
新建User实体类
1 | public class User implements UserDetails { |
新建UserMapper接口连接数据库
1 | @Mapper |
新建UserService用户服务,注意实现UserDetailsService接口
1 | @Service |
新建UserUtil工具类用户获取登陆后的用户信息
1 | public class UserUtils { |
最重要的一步继承该类WebSecurityConfigurerAdapter,并配置,添加注解标明是配置文件
1 | @Configuration |
登陆成功会自动有cookie返回,清除cookie然后测试都成功了
这里简单实用,没有添加角色表,user表机构
| username | password | role |
|---|---|---|
| admin | *** | admin |
| zhangsan | *** | user |
在用户实体类重写getAuthorities该方法,该方法读取用户角色并存储返回到角色数组,如果是分表,role可以存储多个依次添加即可
1 | @Override |
然后在配置里添加,意思是antMatchers里的地址只能是admin角色返回
1 | http.authorizeRequests() |
现在已经能控制角色权限了,但是权限不足返回不友好,这里设置权限不足,返回提示信息
1 | .exceptionHandling().accessDeniedHandler(new AccessDeniedHandler() { |
主要方法是设置过滤器
在配置文件添加
1 | .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() { |
添加urlFilterInvocationSecurityMetadataSource
1 | @Component |
添加urlAccessDecisionManager
1 | @Component |
输出错误User account is locked。
解决:用户类设置返回true,原因自带安全机制,如果需要实现登陆错误次数,此处根据逻辑修改,并在user表添加该字段,通过数据库记录设置是否锁定。
1 | @Override |
错误No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken
解决:WebSecurityConfigurerAdapter没有配置注册userService,而且必须对密码加密,这里必须设置加密方式,可以new PasswordEncoder实现自定加密
1 | @Override |
错误Encoded password does not look like BCrypt原因不识别数据库密码,有可能密码字段太短,或者被截断,另一种就是通过网页手动加密,复制进数据库也有可能不识别,解决通过代码加密插入解决
1 | BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); |
1 | @Override |
用网线连接电脑和路由器的lan口
保持路由器与internet的连通(桥接,有线都可以)
进入k2管理页面(p.to)
进入网页调试模式(chrome按F12),找到定时重启下拉05分的标签
在05的标签右键编辑
将“05”修改成为“05 | wget http://breed.hackpascal.net/breed-mt7620-phicomm-psg1208.bin”之后,鼠标移动到黑框外的空白处点击鼠标左键,结束编辑。
回到页面重新选择05,05后面多了刚刚加的,然后保存。
继续将“05”修改成“05 | mtd unlock Bootloader”,然后回到页面选择05保存。
继续将“05”修改成“05 | mtd -r write breed-mt7620-phicomm-psg1208.bin Bootloader”,然后回到页面选择05保存,等待重启,如果未重启代表失败。
拔除K2上Wan口的网线,路由器断电,持续按住路由器上的reset按钮,接通路由器电源,3秒后松开reset按钮。
在浏览器地址栏输入“http://192.168.1.1”访问Breed Web。
[RT-AC54U-GPIO-1-PSG1218-64M_3.4.3.9-099.trx](F:\xuan install.Back\K2.Back) 访问ip:http://192.168.123.1/ 管理账号:admin/admin wifi密码:1234567890
高级设置-外部网络-外网连接类型pppoe拨号,用户名密码输入宽带账号密码,闪讯拨号插件选择重庆,其他默认,然后应用本页设置
高级设置-系统管理-ntp服务器 分别填入红岩网校的ntp服务器202.202.43.120 202.202.43.131 手动设置时间 应用本页设置
网络地图-点击地球的图标-重新连接 应该可以上网了
斐讯K2 V22.5.9.163官方固件定制版,集成breed,支持官版直刷【V1.4】
直接手动升级k2_163_v14_breed.bin然后进入breed
配置文件路径resuources\application.properties或者resuources\application.yml二者存一
application.properties与application.yml区别
一个是树形目录,一个是单行配置。eg:server.port=8080等效于
1 | server: |
配置环境变量
1 | diy: |
代码里面引用
1 | @Value("${diy.parmars}") |
数据库连接配置
1 | spring: |
springboot访问端口配置
1 | server: |
静态文件路径映射配置,如果配置了spring.resources.static-location会覆盖原来默认的静态文件设置classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file路径指本地磁盘路径,window/Mac/linux的真实目录路径,例如window为C:\\windos\\
1 | spring: |
文件上传大小限制(-1不限制)(128KB)
1 | spring: |
application.yml与bootstrap.yml区别加载顺序bootstrap.yml ->bootstrap-xxx.yml->application.yml->application-xxx.yml
注意:多个配置文件,相同替换,不同并集
bootstrap.yml常用于一些系统级别参数,不被更改
application.yml 应用级别,可以被更改,通过config service服务
bootstrap.yml常用于应用程序引导阶段例如
使用config server时,bootstrap.yml常用配置
1 | spring: |
在不考虑加载顺序,两个配置是可以通用的
可以在配置文件(application/bootstrap)名后加上dev、test等后缀以-分开。使用环境时加上参数--spring.profiles.active=peer1即可
eg: 新建个application-xxx.yml,运行时执行java -jar app.jar --spring.profiles.active=xxx
注意:
这里如果存在多个环境配置文件,且有application/bootstrap没有后缀的原文件时会优先加载它,然后再用指定环境的配置覆盖没有后缀的,这样就会导致,如果没有后缀的文件指定了某个配置,但是有后缀的却没有设置改配置,覆盖的情况,就是取并集,导致某些设置不生效。
springboot存储中文到mysql数据库乱码
解决:在配置文件连接数据库地方添加url: jdbc:mysql://<ip>:<端口>/<数据库名字>?useUnicode=true&characterEncoding=utf-8
application.yml添加注释报错,提示找不到Failed to load property source from location 'classpath:/application.yml'
解决:检查文件编码格式,不是utf-8修改为utf-8
eureka高可用时 提示不可用unavailable-replicas ,原因是存在application.yml,且里面设置了
1 | client: |
然后application-peer.yml并没有设置改属性,取并集之后导致,禁止注册了
解决:
修改application-peer.yml里的属性,并设置为true(未测试)
删除或重命名application-peer.yml(采用)
在application-peer.yml覆写配置,并设置为true(测试,能注册,但是还是unavailable-replicas)
解决:检查是否application.name是否设置了不一样的值,一定要设置一样的名字
官网说明Use bind mounts
官网compose文件:Compose file version 3 reference
bind 挂载,就是宿主机路径对应容器路径,该挂载需要先创建目录,简称/path:/path
volume挂载,不需要提前创建目录,他是以volume形式,简称volume-name:/path
其中z和Z的使用,eg:/path:/path:z
z小写的是可以容器共享
Z大写的是私有,容器不可共享
ro只读挂载
利用gluterfs作为分布式文件系统做同步用,利用虚拟机挂载一个volume专门的存储硬盘
1 | fdisk -l #查看磁盘 |
1 | mkdir /dockerdata #创建数据存储盘 |
systemctl restart glusterd重启