From fcfac96518c6975318203ca5365d2c14235ee378 Mon Sep 17 00:00:00 2001 From: baymax55 Date: Sun, 9 Oct 2022 17:26:29 +0800 Subject: [PATCH] Fix call /hippo4j/v1/cs/auth/users/info/xxx error when set hippo4j.core.auth.enabled = false --- .../cn/hippo4j/auth/config/FilterConfig.java | 21 ++++++++++++++ .../auth/filter/RewriteUserInfoApiFilter.java | 29 +++++++++++++++++++ .../cn/hippo4j/auth/toolkit/AuthUtil.java | 15 ++++++++++ 3 files changed, 65 insertions(+) create mode 100644 hippo4j-auth/src/main/java/cn/hippo4j/auth/config/FilterConfig.java create mode 100644 hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/RewriteUserInfoApiFilter.java create mode 100644 hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/AuthUtil.java diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/config/FilterConfig.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/config/FilterConfig.java new file mode 100644 index 00000000..f8f65bd1 --- /dev/null +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/config/FilterConfig.java @@ -0,0 +1,21 @@ +package cn.hippo4j.auth.config; + +import cn.hippo4j.auth.filter.RewriteUserInfoApiFilter; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * + */ +@Configuration +public class FilterConfig { + + @Bean + public FilterRegistrationBean userInfoApiFilterRegistrationBean() { + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setFilter(new RewriteUserInfoApiFilter()); + registration.addUrlPatterns("/*"); + return registration; + } +} \ No newline at end of file diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/RewriteUserInfoApiFilter.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/RewriteUserInfoApiFilter.java new file mode 100644 index 00000000..da5d5a89 --- /dev/null +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/RewriteUserInfoApiFilter.java @@ -0,0 +1,29 @@ +package cn.hippo4j.auth.filter; + +import cn.hippo4j.auth.toolkit.AuthUtil; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +/** + * When anonymous login is enabled, an error will be reported when viewing the current user information. + * Modify the URI to query the default administrator information. + * + * before:hippo4j/v1/cs/auth/users/info or hippo4j/v1/cs/auth/users/info/xxx + * after:hippo4j/v1/cs/auth/users/info/admin + */ +public class RewriteUserInfoApiFilter implements Filter { + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + boolean enableAuthentication = AuthUtil.enableAuthentication; + HttpServletRequest httpRequest = (HttpServletRequest) servletRequest; + String path = httpRequest.getRequestURI(); + if (!enableAuthentication && path.contains("users/info")) { + httpRequest.getRequestDispatcher("/hippo4j/v1/cs/auth/users/info/admin").forward(servletRequest, servletResponse); + return; + } + filterChain.doFilter(servletRequest, servletResponse); + } +} \ No newline at end of file diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/AuthUtil.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/AuthUtil.java new file mode 100644 index 00000000..881862cd --- /dev/null +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/AuthUtil.java @@ -0,0 +1,15 @@ +package cn.hippo4j.auth.toolkit; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class AuthUtil { + + public static boolean enableAuthentication; + + @Value("${hippo4j.core.auth.enabled:true}") + public void setEnableAuthentication(boolean enabled) { + AuthUtil.enableAuthentication = enabled; + } +} \ No newline at end of file