SpringBoot集成Keycloak简单实例
环境安装
准备工作
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
在这里,我们添加两个角色,角色名分别为demoUser和notDemoUser。
创建User
选择左侧User菜单,选择表格右上角的Add User
在这里,我们创建两个角色demouser和notdemouser
创建好用户后,选择Credentials,并在下方输入两次密码并把Tempoorary右侧的On点一下改成Off(不改的话首次登陆需要修改密码),给用户添加密码
分配User的角色
创建好用户后进入用户配置界面,选择Role Mappings,并在下方Realm Roles中选择需要添加的角色,并点击Add selected按钮即可添加用户角色。
在这里,我们给demouser分配了demoUser角色,给notdemouser分配了notDemoUser角色。
配置Client和Role映射
- 选择左侧Clients,选择我们的keycloakDemo,进入配置页面
- 选择Scope,将默认的Full Scope Allowed后面的On点击改为Off
- 选择我们分配的角色——demoUser,点击Add selected按钮添加到右侧
- 映射成功
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!";
}
}
开始测试
- 启动项目
- 输入http://localhost:8600/demo/getValue,会跳转到keycloak登陆页面
- 用demouser登陆,页面显示如下
- 用notdemouser登陆,页面显示如下
- keycloak测试完毕
- 鉴于有同学自己尝试容易失败,贴上我自己的demo项目地址:keycloak简易demo和spi项目
- 一定要保证项目keycloak版本和项目版本一致,本人没测过不一致会怎么样,也不知道他们做兼容做的好不好。
参考文章链接:Keycloak搭建手把手操作指南
版权声明:本文为m0_46267097原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。