Skip to main content

面向API的高性能认证鉴权框架

可扩展

基于 RBAC (用户-角色-资源)主要关注于对 REST API 的安全 (认证与鉴权) 保护。
自定义Subject,Subject Creator,Processor和自定义数据源等良好的扩展接口, 样例文档助急速理解扩展使用。

原生兼容

支持 WebSockets ,主流 HTTP 容器 ServletJAX-RS
无特定Web框架依赖, 原生支持 Spring Boot, Spring WebFlux, Javalin, Quarkus, Ktor, Solon, Jfinal, Micronaut 等。

多支持与高性能

原生拥有 JWT, Basic Auth, Digest Auth 等认证方式。
支持动态修改权限(动态配置每个 API 谁有权访问)。
基于改进的字典匹配树拥有的高性能

适用大部分Jvm Web框架

您可以通过使用Sureness来保护大部分JVM系语言的现代化框架搭建的后台服务,比如:Java 语言的 Spring, Spring Boot, Spring WebFlux, Javalin, Quarkus, Micronaut, Solon, Jfinal 和 Kotlin 语言的 Ktor.

Sureness的本质是使用interceptor(如 servlet filter or Spring interceptor)拦截所有API请求对其认证鉴权判断。
所以对于任何Web框架,只要其支持拦截器interceptor, 就能轻松和Sureness集成。Sureness使用异常处理流程即Exception Handling Process, checkIn() 方法会在认证鉴权成功后返回带有用户信息的 SubjectSum 对象,但认证鉴权失败时抛出不同类型的异常,用户根据这些异常来继续后面的流程。

Native Support for:

springJavalinMicronautQuarkusKtor

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
try {
SubjectSum subject = SurenessSecurityManager.getInstance().checkIn(servletRequest);
} catch (IncorrectCredentialsException | UnknownAccountException | ExpiredCredentialsException e1) {
logger.debug("this request account info is illegal");
responseWrite(ResponseEntity
.status(HttpStatus.UNAUTHORIZED).body(e1.getMessage()), servletResponse);
return;
} catch (UnauthorizedException e4) {
logger.debug("this account can not access this resource");
responseWrite(ResponseEntity
.status(HttpStatus.FORBIDDEN).body(e4.getMessage()), servletResponse);
return;
} catch (RuntimeException e) {
logger.error("other exception happen: ", e);
responseWrite(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(),
servletResponse);
return;
}
filterChain.doFilter(servletRequest, servletResponse);
}

大量集成样例

Sureness integrate Spring Boot sample(configuration file scheme)
Sureness integrate Spring Boot sample(database scheme)
Sureness integrate Quarkus sample
Sureness integrate Javalin sample
Sureness integrate Ktor sample
Sureness integrate Spring Webflux sample
Sureness integrate Micronaut sample
Sureness integrate Jfinal sample
Sureness integrate Solon sample
Sureness integrate Spring Gateway sample
Sureness integrate Zuul sample
Sureness integrate Session sample
Sureness integrate Redis Session cache sample

基准性能测试

基准测试显示 Sureness 对比无权限框架应用损耗 0.026ms 性能,Shiro 损耗 0.088ms,Spring Security 损耗 0.116ms,相比之下 Sureness 性能(参考TPS损耗)是 Shiro 的 3 倍 ,Spring Security 的 4 倍
性能差距会随着api匹配链的增加而进一步拉大

ab -n 4000 -c 50 -A root:23456 localhost:8088/api/v1/source1
Detail see Benchmark Test

为什么高性能

在大量的请求和过滤链匹配下,我们发现主要的性能瓶颈在线性过滤链匹配这。
所以我们使用了改进的字典匹配树来代替其它安全框架常用的线性Ant匹配
实践效果证明这有效,提升了较大性能

几分钟入门Sureness

我们提供了很多教程和集成样例,您可以参考其中在10分钟之内使用 Sureness 做一个完整功能的认证鉴权项目。
Have Fun!


<dependency>
<groupId>com.usthe.sureness</groupId>
<artifactId>sureness-core</artifactId>
<version>1.0.6</version>
</dependency>

compile group: 'com.usthe.sureness', name: 'sureness-core', version: '1.0.6'

友情链接

MaxKey
TLog
Hutool
Sa-Token
LiteFlow
jpom