SpringBoot集成Keycloak简单实例

环境安装

keycloak10.0.1安装教程

准备工作

Keycloak

创建realm

点击Add Realm
在这里插入图片描述
输入Name,点击Create按钮。我们就创建了一个名为myrealm的realm。
在这里插入图片描述

创建client

创建完realm后,我们来为myrealm创建Client ,点击下图的Create按钮
在这里插入图片描述
填写Client信息,这边我们创建一个名为keycloakDemo的Client。
在这里插入图片描述

配置Client

点击Client ID或者后面的Edit都可进入Client配置界面
在这里插入图片描述
修改Client配置
在这里插入图片描述

创建Role

选择左边Role菜单,点击表格右上角的Add Role
在这里,我们添加两个角色,角色名分别为demoUsernotDemoUser
在这里插入图片描述

创建User

选择左侧User菜单,选择表格右上角的Add User
在这里,我们创建两个角色demouser和notdemouser
在这里插入图片描述
创建好用户后,选择Credentials,并在下方输入两次密码并把Tempoorary右侧的On点一下改成Off(不改的话首次登陆需要修改密码),给用户添加密码
在这里插入图片描述

分配User的角色

创建好用户后进入用户配置界面,选择Role Mappings,并在下方Realm Roles中选择需要添加的角色,并点击Add selected按钮即可添加用户角色。
在这里,我们给demouser分配了demoUser角色,给notdemouser分配了notDemoUser角色。
在这里插入图片描述

配置Client和Role映射

  1. 选择左侧Clients,选择我们的keycloakDemo,进入配置页面
  2. 选择Scope,将默认的Full Scope Allowed后面的On点击改为Off
  3. 选择我们分配的角色——demoUser,点击Add selected按钮添加到右侧
  4. 映射成功
    在这里插入图片描述

SpringBoot

创建一个简单的SpringBoot项目

在这里我们创建一个名为keycloakdemo的web项目
在这里插入图片描述

添加依赖

添加依赖管理,引入Keycloak adapter的bom
注意,bom版本需要和keycloak版本一致

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.keycloak.bom</groupId>
      <artifactId>keycloak-adapter-bom</artifactId>
      <version>10.0.1</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

添加Keycloak的starter

<dependency>
  <groupId>org.keycloak</groupId>
  <artifactId>keycloak-spring-boot-starter</artifactId>
  <version>10.0.1</version>
</dependency>

如果不明白怎么加,完整pom.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.keycloak/keycloak-spring-boot-starter -->
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-spring-boot-starter</artifactId>
            <version>10.0.1</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.keycloak.bom</groupId>
                <artifactId>keycloak-adapter-bom</artifactId>
                <version>10.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

配置文件

application.yml中添加如下配置

spring:
  application:
    name: keycloakDemo
server:
  port: 8600
keycloak:
  # 表示是一个public的client
  public-client: true
  # keycloak的地址
  auth-server-url: http://localhost:8080/auth
  # keycloak中的realm
  realm: myrealm
  # client ID
  resource: keycloakDemo
  # 安全约束
  securityConstraints:
    - authRoles:
        # 以下路径需要demoUser角色才能访问
        - demoUser
      securityCollections:
        # name可以随便写
        - name: common user
          patterns:
            - /demo/getValue

添加代码

package com.example.keycloakdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Administrator
 */
@SpringBootApplication
public class KeycloakdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(KeycloakdemoApplication.class, args);
    }

}

@RestController
@RequestMapping("/demo")
class DemoController{
    @GetMapping("getValue")
    public String getValue(){
        return "Hello Keycloak!";
    }
}

开始测试

  1. 启动项目
  2. 输入http://localhost:8600/demo/getValue,会跳转到keycloak登陆页面
    在这里插入图片描述
  3. 用demouser登陆,页面显示如下
    在这里插入图片描述
  4. 用notdemouser登陆,页面显示如下
    在这里插入图片描述
  5. keycloak测试完毕
  6. 鉴于有同学自己尝试容易失败,贴上我自己的demo项目地址:keycloak简易demo和spi项目
  7. 一定要保证项目keycloak版本和项目版本一致,本人没测过不一致会怎么样,也不知道他们做兼容做的好不好。

参考文章链接:Keycloak搭建手把手操作指南


版权声明:本文为m0_46267097原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。