关于jdk的序列化,可以参考java.io.Serializable
中的javadoc,这里摘取翻译一部分:
类通过实现 java.io.Serializable 接口以启用其序列化功能。
未实现此接口的类将无法使其任何状态序列化或反序列化。
可序列化类的所有子类型本身都是可序列化的。因为实现接口也是间接的等同于继承。
关于jdk的序列化,可以参考java.io.Serializable
中的javadoc,这里摘取翻译一部分:
类通过实现 java.io.Serializable 接口以启用其序列化功能。
未实现此接口的类将无法使其任何状态序列化或反序列化。
可序列化类的所有子类型本身都是可序列化的。因为实现接口也是间接的等同于继承。
在使用SpringBoot集成shiro时,遇到过一个问题,在启动时,shiroFilter中使用的bean都报WARN异常:
在使用SpringBoot集成shiro时,遇到过一个问题,shiro需要注册一个LifecycleBeanPostProcessor
,用来调用内部的init()
和destroy()
方法。
一般在Configuration中注册:
最近在做传统Spring项目到SpringBoot项目迁移过程中,遇到了一些bean加载顺序的问题:
比如一个config中的bean依赖于另一个config中的bean进行初始化,于是查了一些资料,出现了一些新的概念:
@Order
@AutoConfigureAfter
@DependsOn
AuthenticationToken用于收集用户提交的身份(如用户名)及凭据(如密码):
扩展接口RememberMeAuthenticationToken
提供了boolean isRememberMe()
实现“记住我”的功能;
扩展接口HostAuthenticationToken
提供了String getHost()
方法用于获取用户“主机”的功能。
Shiro提供了一个直接拿来用的UsernamePasswordToken
,用于实现用户名/密码Token
组,另外其实现了RememberMeAuthenticationToken
和HostAuthenticationToken
,可以实现记住我及主机验证的支持。
授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。
在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。
认证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。
在shiro中,用户需要提供 principals(身份)和 credentials(证明)给shiro,从而应用能验证用户身份:
最常见的principals和credentials组合就是用户名/密码了。接下来先进行一个基本的身份认证。
Apache Shiro是Java的一个安全框架。
Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。
基本功能如下:
业务场景:
日志系统整体迁入ELK,大体需要两种日志:
关于ELK这里不做过多讲解,一般也是公司运维同事维护,这里只介绍如何将日志打印成可被收集输送到es的json格式。
common-logging 是apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j
,或者jdk自带的logging
。common-logging
会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging
内部有一个Simple logger
的简单实现,但是功能很弱。
所以使用common-logging
,通常都是配合着log4j
来使用。使用它的好处就是,代码依赖是common-logging
而非log4j
, 避免了和具体的日志方案直接耦合,在有必要时,可以更改日志实现的第三方库。