在 5 分钟内使用 play-pac4j 保护您的 Play 2 Webapp

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

我很自豪地宣布发布基于 pac4j v1.8 ( https://github.com/pac4j/pac4j ) 的 play-pac4j v2.0 ( https://github.com/pac4j/play-pac4j )任何 Play 2 网络应用程序。它现在是一个 完整的安全库,简单而强大,支持身份验证和授权 ,还支持应用程序注销和 CSRF 保护等高级功能。

它支持大多数身份验证机制:OAuth(Facebook、Twitter、Google、Yahoo...)、CAS、HTTP(表单、基本身份验证...)、OpenID、SAML、Google App Engine、OpenID Connect、JWT、LDAP、RDBMS、 MongoDB 和 Stormpath 以及授权检查(角色/权限、CSRF 令牌...)

通过四个简单的步骤,保护您的网络应用程序:

1) 添加对库的依赖(Java Play 应用程序的 play-pac4j-java 或 Scala 应用程序的 play-pac4j-scala_2.11 )和所需的身份验证机制(例如 Facebook 的 pac4j-oauth 库)

2) 在模块中定义身份验证机制(客户端)和授权者(检查授权)。例如:Facebook 身份验证和 ROLE_ADMIN


 public class SecurityModule extends AbstractModule {
@Override
protected void configure() {
    FacebookClient facebookClient = new FacebookClient("xx", "yy");
    Clients clients = new Clients("http://localhost:9000/callback", facebookClient);
    Config config = new Config(clients);
    config.addAuthorizer("admin", new RequireAnyRoleAuthorizer("ROLE_ADMIN"));
    bind(Config.class).toInstance(config);
}

}

3) 定义用于 Facebook 身份验证的回调控制器( 路由 ):


 public class SecurityModule extends AbstractModule {
@Override
protected void configure() {
    FacebookClient facebookClient = new FacebookClient("xx", "yy");
    Clients clients = new Clients("http://localhost:9000/callback", facebookClient);
    Config config = new Config(clients);
    config.addAuthorizer("admin", new RequireAnyRoleAuthorizer("ROLE_ADMIN"));
    bind(Config.class).toInstance(config);
}

}

4) 保护 /facebook/index.html url 以要求用户进行身份验证,如果没有,则执行 Facebook 身份验证:


 public class SecurityModule extends AbstractModule {
@Override
protected void configure() {
    FacebookClient facebookClient = new FacebookClient("xx", "yy");
    Clients clients = new Clients("http://localhost:9000/callback", facebookClient);
    Config config = new Config(clients);
    config.addAuthorizer("admin", new RequireAnyRoleAuthorizer("ROLE_ADMIN"));
    bind(Config.class).toInstance(config);
}

}


 public class SecurityModule extends AbstractModule {

    @Override
    protected void configure() {
        FacebookClient facebookClient = new FacebookClient("xx", "yy");
        Clients clients = new Clients("http://localhost:9000/callback", facebookClient);
        Config config = new Config(clients);
        config.addAuthorizer("admin", new RequireAnyRoleAuthorizer("ROLE_ADMIN"));
        bind(Config.class).toInstance(config);
    }
}

和/或要求用户拥有 ROLE_ADMIN:


 public class SecurityModule extends AbstractModule {
@Override
protected void configure() {
    FacebookClient facebookClient = new FacebookClient("xx", "yy");
    Clients clients = new Clients("http://localhost:9000/callback", facebookClient);
    Config config = new Config(clients);
    config.addAuthorizer("admin", new RequireAnyRoleAuthorizer("ROLE_ADMIN"));
    bind(Config.class).toInstance(config);
}

}

阅读文档:https: //github.com/pac4j/play-pac4j 并在 Java 中尝试演示:https: //github.com/pac4j/play-pac4j-java-demo 或在 Scala 中: https://github .com/pac4j/play-pac4j-scala-演示