2019-04-19
每天看一张shiro,一口气看完太难https://jinnianshilongnian.iteye.com/blog/2018398
每天一点
https://gitchat.csdn.net/activity/5c6cf6044bb44360f3370255?seriesId=5c7f8f900043541716772f2a&utm_source=csdn_toolbar
明天继续看
https://blog.csdn.net/fu770727044/article/details/85682926
实现服务器启动默认开启阿波罗
Springcloud 阿波罗原理
info debug日志级别,为什么debug,info能打印
shiro第二章
即在应用中,谁能证明他就是本人。(身份证,用户名/密码)
在shiro中,用户需要提供principals 身份和 credentials 证明 给shiro,从而应用能验证用户身份。
身份:主体的标识属性,可以是邮箱,用户名
证明:密码/数字证书
Subject Realm : 主体 验证主体的数据源
身份认证流程
image流程如下:
1、首先调用Subject.login(token)进行登录,其会自动委托给Security Manager,调用之前必须通过SecurityUtils. setSecurityManager()设置;
2、SecurityManager负责真正的身份验证逻辑;它会委托给Authenticator进行身份验证;
3、Authenticator才是真正的身份验证者,Shiro API中核心的身份认证入口点,此处可以自定义插入自己的实现;
4、Authenticator可能会委托给相应的AuthenticationStrategy进行多Realm身份验证,默认ModularRealmAuthenticator会调用AuthenticationStrategy进行多Realm身份验证;
5、Authenticator会把相应的token传入Realm,从Realm获取身份验证信息,如果没有返回/抛出异常表示身份验证失败了。此处可以配置多个Realm,将按照相应的顺序及策略进行访问。
Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。如我们之前的ini配置方式将使用org.apache.shiro.realm.text.IniRealm。
Shiro默认提供的Realm:
一般继承AuthorizingRealm(授权)即可,其继承了AuthenticatingRealm(即身份验证),而且也间接继承了CachingRealm(带有缓存实现)
org.apache.shiro.realm.text.IniRealm:[users]部分指定用户名/密码及其角色;[roles]部分指定角色即权限信息;
org.apache.shiro.realm.text.PropertiesRealm: user.username=password,role1,role2指定用户名/密码及其角色;role.role1=permission1,permission2指定角色及权限信息;
org.apache.shiro.realm.jdbc.JdbcRealm:通过sql查询相应的信息,如“select password from users where username = ?”获取用户密码,“select password, password_salt from users where username = ?”获取用户密码及盐;“select role_name from user_roles where username = ?”获取用户角色;“select permission from roles_permissions where role_name = ?”获取角色对应的权限信息;也可以调用相应的api进行自定义sql;
2.6 Authenticator及AuthenticationStrategy
Authenticator的职责是验证用户帐号,是Shiro API中身份验证核心的入口点
final的应用场景?
1.修饰变量:一般为static final
image.png
2.修饰方法
修饰方法之后,比非final方法要快(快在哪呢?),因为在编译时已经静态绑定了,不需要在动态绑定
3.修饰类
当一个类被final修饰之后,表示该类是完整的,不能被继承。
final的优点:
final关键字提高了性能。JVM和Java应用都会缓存final变量。
final变量可以在多线程环境下共享,而不需要额外的同步开销
使用final关键字,JVM会对方法,变量,类进行优化
不可变类:他的对象一旦被创建了就不能被更改了,String是不可变类的代表,好处有:对象只可读,在多线程环境之下安全的共享,不用额外同步等
总而言之就是 快,多线程安全
Java中Math. round()方法干什么的?
返回值为long,如果是Math. round(1f)返回的就是int
Java八种基本数据类型:
四种整形:byte short int long
两种浮点型 float double
一种字符类型 char
一种布尔类型 boolean
8位:Byte(字节型) 16位:short(短整型)、char(字符型) 32位:int(整型)、float(单精度型/浮点型) 64位:long(长整型)、double(双精度型) 最后一个:boolean(布尔类型
阿波罗为什么能实时修改内存参数?
1.因为客户端和服务端保持一个长连接(为了省内存,性能,宽带的耗损 用的长轮训)
2.是5分钟客户端 就会去服务端访问一次 接口,一般都是304(客户端发送给服务端的请求接收到了,但是文档信息没有修改的时候返回的状态码)
image.png
晚上 申请订阅号和2个小程序 实现统一登录 和模板发送消息
安装单车,用15分钟(不要太多)
image.png
https://blog.csdn.net/huaweitman/article/details/64128427
看世纪高通的面试题
wxjava原理总结