getSystemInfo() {
+ return ResponseEntity.ok("这是系统信息接口");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/tanqidi/survey/controller/IndexController.java b/src/main/java/com/tanqidi/survey/controller/IndexController.java
new file mode 100644
index 0000000..f10fe92
--- /dev/null
+++ b/src/main/java/com/tanqidi/survey/controller/IndexController.java
@@ -0,0 +1,42 @@
+package com.tanqidi.survey.controller;
+
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.core.user.OAuth2User;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * com.edw.controller.IndexController
+ *
+ *
+ * @author Muhammad Edwin < edwin at redhat dot com >
+ * 21 Mar 2023 20:09
+ */
+@RestController
+public class IndexController {
+
+ @GetMapping(path = "/")
+ public Map index() {
+ OAuth2User user = (OAuth2User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+ return new HashMap() {{
+ put("name", user.getAttribute("name"));
+ put("email", user.getAttribute("email"));
+ put("allAttributes", user.getAttributes()); // 👈 打印所有属性
+ }};
+ }
+
+
+
+ @GetMapping(path = "/unauthenticated")
+ public HashMap unauthenticatedRequests() {
+ return new HashMap(){{
+ put("this is", "unauthenticated endpoint");
+ }};
+ }
+
+}
diff --git a/src/main/java/com/tanqidi/survey/controller/PublicController.java b/src/main/java/com/tanqidi/survey/controller/PublicController.java
new file mode 100644
index 0000000..e4fd538
--- /dev/null
+++ b/src/main/java/com/tanqidi/survey/controller/PublicController.java
@@ -0,0 +1,21 @@
+package com.tanqidi.survey.controller;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/public")
+public class PublicController {
+
+ @GetMapping("/info")
+ public ResponseEntity getPublicInfo() {
+ return ResponseEntity.ok("这是一个公开接口,任何人都可以访问");
+ }
+
+ @GetMapping("/health")
+ public ResponseEntity healthCheck() {
+ return ResponseEntity.ok("服务正常运行中");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/tanqidi/survey/controller/UserController.java b/src/main/java/com/tanqidi/survey/controller/UserController.java
new file mode 100644
index 0000000..f4fa884
--- /dev/null
+++ b/src/main/java/com/tanqidi/survey/controller/UserController.java
@@ -0,0 +1,36 @@
+package com.tanqidi.survey.controller;
+
+import com.tanqidi.survey.dto.UserInfoDTO;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/user")
+public class UserController {
+
+ @GetMapping("/profile")
+ public ResponseEntity getUserProfile() {
+ return ResponseEntity.ok("这是用户个人资料接口");
+ }
+
+ @GetMapping("/dashboard")
+ public ResponseEntity getUserDashboard() {
+ return ResponseEntity.ok("这是用户仪表盘接口");
+ }
+
+ @GetMapping("/me")
+ public ResponseEntity getCurrentUser() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ UserInfoDTO userInfo = new UserInfoDTO();
+ userInfo.setUsername(authentication.getName());
+ userInfo.setRoles(authentication.getAuthorities().stream()
+ .map(authority -> authority.getAuthority())
+ .toArray(String[]::new));
+
+ return ResponseEntity.ok(userInfo);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/tanqidi/survey/dto/UserInfoDTO.java b/src/main/java/com/tanqidi/survey/dto/UserInfoDTO.java
new file mode 100644
index 0000000..538808d
--- /dev/null
+++ b/src/main/java/com/tanqidi/survey/dto/UserInfoDTO.java
@@ -0,0 +1,40 @@
+package com.tanqidi.survey.dto;
+
+public class UserInfoDTO {
+ private String username;
+ private String email;
+ private String[] roles;
+ private String accessToken;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String[] getRoles() {
+ return roles;
+ }
+
+ public void setRoles(String[] roles) {
+ this.roles = roles;
+ }
+
+ public String getAccessToken() {
+ return accessToken;
+ }
+
+ public void setAccessToken(String accessToken) {
+ this.accessToken = accessToken;
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 0000000..d386d6a
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,27 @@
+spring.application.name=survey-service
+server.port=8080
+
+## logging
+logging.level.org.springframework.security=INFO
+logging.pattern.console=%d{dd-MM-yyyy HH:mm:ss} %magenta([%thread]) %highlight(%-5level) %logger.%M - %msg%n
+
+## keycloak
+# OAuth2 Log In Spring Boot 2.x Property Mappings
+# https://docs.spring.io/spring-security/reference/servlet/oauth2/login/core.html#oauth2login-boot-property-mappings
+spring.security.oauth2.client.registration.keycloak.client-id=test-service
+spring.security.oauth2.client.registration.keycloak.client-secret=e6LMQn67PmoaeXDxCvxiLIfmypjIIygi
+#spring.security.oauth2.client.registration.keycloak.client-authentication-method =
+# org.springframework.security.oauth2.core.AuthorizationGrantType
+spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code
+#spring.security.oauth2.client.registration.keycloak.authorization-grant-type=urn:ietf:params:oauth:grant-type:jwt-bearer
+#spring.security.oauth2.client.registration.keycloak.redirect-uri =
+spring.security.oauth2.client.registration.keycloak.scope=openid
+#spring.security.oauth2.client.registration.keycloak.client-name =
+
+#spring.security.oauth2.client.provider.keycloak.authorization-uri
+#spring.security.oauth2.client.provider.keycloak.token-uri
+#spring.security.oauth2.client.provider.keycloak.jwk-set-uri
+spring.security.oauth2.client.provider.keycloak.issuer-uri=http://172.31.0.233:31364/realms/tanqidi
+#spring.security.oauth2.client.provider.keycloak.user-info-uri
+#spring.security.oauth2.client.provider.keycloak.user-info-authentication-method
+spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username
diff --git a/src/test/java/com/tanqidi/survey/SurveyServiceApplicationTests.java b/src/test/java/com/tanqidi/survey/SurveyServiceApplicationTests.java
new file mode 100644
index 0000000..119007b
--- /dev/null
+++ b/src/test/java/com/tanqidi/survey/SurveyServiceApplicationTests.java
@@ -0,0 +1,13 @@
+package com.tanqidi.survey;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class SurveyServiceApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}