当前位置: 首页 > 工具软件 > pac4j > 使用案例 >

pac4j初认识

吕皓
2023-12-01

1、什么是pac4j

pac4j是一个java的安全 引擎

在一套标准的interface下,

    1、提供多种认证机制,表单登录,JWS,cas,OAuth等等

    2、多种授权和权限检查机制:role/permission,CORS,CSRF,HTTP Security headers

    3、多种框架集成方式:springboot, shiro,play,spring security

多种认证方式可插拔,可同时使用一种或多种

常见的是springboot+cas+role/permissions

2、重要组件及概念

client

引入不同的认证包会包含不同的Client类,每个Client类代表一种登录和认证方式。比如:

使用CLient-cas,里面就是CasClient

authenticator

Authenticator是client的一个组件,用来validate credentials,并用来创建user profile。

authorizer

用来检测用户是否能够通过授权,pac4j内置了很多authorizer:

  • StrictTransportSecurityHeader
  • XContentTypeOptionsHeader
  • XFrameOptionsHeader
  • XSSProtectionHeader
  • CacheControlHeader
  • CsrfAuthorizer
  • CsrfTokenGeneratorAuthorizer
  • CorsAuthorizer
  • IsAnonymousAuthorizer
  • IsAuthenticatedAuthorizer
  • IsFullyAuthenticatedAuthorizer
  • IsRememberedAuthorizer

我们也可以自己实现,然后添加到config的authorizerMap中

matchers

用来判断一个请求,是否经过登录或认证

开发者可以在config中定义很多的matchers,并定义每个请求需要经过哪些matchers

一个请求只有在经过的matchers返回值都为true时才能进行认证检测

如果为false,则直接授权访问

config

配置了要用到的clients,authorizers,matchers

user profile

代表了一个认证后的用户,包括id,属性,角色,权限等

web context

对一个请求的抽象,包含了request,response,session,还有pac4j提供的其他的来辅助描述这次请求的数据

security filter

拦截机制,根据client的不同来进行认证检查,授权检查,从而保护一个url地址,如果是没有认证的用户,则尝试登录

callback controller

对于一些间接登录,如需要在一个特殊页面进行登录,不是每个请求都携带认证信息的client,在完成登陆操作需要调用callback controller,最终完成登陆操作。

logout controller

登出操作

3、流程

一个请求过来,访问一个url A,如果A需要被保护,那么开始以下步骤:

1、开发人员设置需要经过的security filter

2、如果security filter能从web context中获取到user profile,并且user profile是登录状态,那么通过认证,允许访问。

3、如果没有user profile,那么从config中配置的clients中获取到该应用可支持的client

4、先用direct clients来判断是否能登录,如果此时的context中包含了这类client所需的登录信息,如token,则能够被授权访问成功

5、如果不行,则用indirect client的登录方式,跳转回特定的登录页

6、在特定的登录页登录成功后,会跳转到rollback controller进行最后的登录操作,及获取user profile并保存。

7、退出时,访问logoutcontroller,执行退出

 类似资料: