几天来,我一直试图让我的 Spring Web 应用程序与 Keycloak 一起工作,但没有任何运气。我按照他们的文档中提到的说明进行操作 here .

我已经设置了一个在 Wildfly 9 中运行的 Keycloak 服务器。对于我的 Web 应用程序,我使用 JBoss AS 7 和 Spring Framework 4.1.7。我按照步骤 here 为我的 JBoss AS 7 配置了适配器.然后对于我的 Spring Web 应用程序,我按照提到的步骤 here .但是,当我尝试运行我的应用程序时,它不会重定向到我的 Keycloak 服务器。它只显示页面而不需要任何身份验证。

请在下面查看我的代码。

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 http://maven.apache.org/maven-v4_0_0.xsd"> 
  <modelVersion>4.0.0</modelVersion> 
  <groupId>org.demo</groupId> 
  <artifactId>keycloak</artifactId> 
  <name>demo-keycloak-mvc</name> 
  <packaging>war</packaging> 
  <version>1.0.0-BUILD-SNAPSHOT</version> 
  <properties> 
    <java-version>1.6</java-version> 
    <org.springframework-version>4.1.7.RELEASE</org.springframework-version> 
    <org.aspectj-version>1.6.10</org.aspectj-version> 
    <org.slf4j-version>1.6.6</org.slf4j-version> 
  </properties> 
  <dependencies> 
    <!-- Spring --> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
        <!-- Exclude Commons Logging in favor of SLF4j --> 
        <exclusion> 
          <groupId>commons-logging</groupId> 
          <artifactId>commons-logging</artifactId> 
        </exclusion> 
      </exclusions> 
    </dependency> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${org.springframework-version}</version> 
    </dependency> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${org.springframework-version}</version> 
    </dependency> 
 
    <!-- AspectJ --> 
    <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${org.aspectj-version}</version> 
    </dependency> 
 
    <!-- Logging --> 
    <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j-version}</version> 
    </dependency> 
    <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
    </dependency> 
    <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
    </dependency> 
    <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.15</version> 
      <exclusions> 
        <exclusion> 
          <groupId>javax.mail</groupId> 
          <artifactId>mail</artifactId> 
        </exclusion> 
        <exclusion> 
          <groupId>javax.jms</groupId> 
          <artifactId>jms</artifactId> 
        </exclusion> 
        <exclusion> 
          <groupId>com.sun.jdmk</groupId> 
          <artifactId>jmxtools</artifactId> 
        </exclusion> 
        <exclusion> 
          <groupId>com.sun.jmx</groupId> 
          <artifactId>jmxri</artifactId> 
        </exclusion> 
      </exclusions> 
      <scope>runtime</scope> 
    </dependency> 
 
    <!-- @Inject --> 
    <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
    </dependency> 
 
    <!-- Servlet --> 
    <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
    </dependency> 
    <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
    </dependency> 
    <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
    </dependency> 
 
    <!-- Test --> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.7</version> 
      <scope>test</scope> 
    </dependency> 
 
    <!-- Keycloak --> 
    <dependency> 
      <groupId>org.keycloak</groupId> 
      <artifactId>keycloak-spring-security-adapter</artifactId> 
      <version>1.3.1.Final</version> 
    </dependency> 
 
  </dependencies> 
  <build> 
    <plugins> 
      <plugin> 
        <groupId>org.jboss.as.plugins</groupId> 
        <artifactId>jboss-as-maven-plugin</artifactId> 
        <version>7.7.Final</version> 
        <configuration> 
          <skip>false</skip> 
        </configuration> 
      </plugin> 
      <plugin> 
        <artifactId>maven-eclipse-plugin</artifactId> 
        <version>2.9</version> 
        <configuration> 
          <additionalProjectnatures> 
            <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
          </additionalProjectnatures> 
          <additionalBuildcommands> 
            <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
          </additionalBuildcommands> 
          <downloadSources>true</downloadSources> 
          <downloadJavadocs>true</downloadJavadocs> 
        </configuration> 
      </plugin> 
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.5.1</version> 
        <configuration> 
          <source>1.6</source> 
          <target>1.6</target> 
          <compilerArgument>-Xlint:all</compilerArgument> 
          <showWarnings>true</showWarnings> 
          <showDeprecation>true</showDeprecation> 
        </configuration> 
      </plugin> 
      <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>exec-maven-plugin</artifactId> 
        <version>1.2.1</version> 
        <configuration> 
          <mainClass>org.test.int1.Main</mainClass> 
        </configuration> 
      </plugin> 
    </plugins> 
  </build> 
</project> 

web.xml
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
 
  <!-- The definition of the Root Spring Container shared by all Servlets  
    and Filters --> 
  <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring/root-context.xml</param-value> 
  </context-param> 
 
  <!-- Creates the Spring Container shared by all Servlets and Filters --> 
  <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
  </listener> 
 
  <!-- Processes application requests --> 
  <servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value> 
        /WEB-INF/spring/appServlet/servlet-context.xml, 
        /WEB-INF/spring/appServlet/security-context.xml 
      </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
  </servlet> 
 
  <servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
  </servlet-mapping> 
 
</web-app> 

servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:beans="http://www.springframework.org/schema/beans" 
  xmlns:context="http://www.springframework.org/schema/context" 
  xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
 
  <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> 
 
  <!-- Enables the Spring MVC @Controller programming model --> 
  <annotation-driven /> 
 
  <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
  <resources mapping="/resources/**" location="/resources/" /> 
 
  <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 
  <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <beans:property name="prefix" value="/WEB-INF/views/" /> 
    <beans:property name="suffix" value=".jsp" /> 
  </beans:bean> 
 
  <context:component-scan base-package="org.demo.keycloak" /> 
 
 
 
</beans:beans> 

安全上下文.xml
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:security="http://www.springframework.org/schema/security" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation=" 
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd 
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context.xsd 
       http://www.springframework.org/schema/security 
       http://www.springframework.org/schema/security/spring-security.xsd"> 
 
    <context:component-scan base-package="org.keycloak.adapters.springsecurity" /> 
 
    <security:authentication-manager alias="authenticationManager"> 
        <security:authentication-provider ref="keycloakAuthenticationProvider" /> 
    </security:authentication-manager> 
 
    <bean id="adapterDeploymentContextBean" class="org.keycloak.adapters.springsecurity.AdapterDeploymentContextBean" /> 
    <bean id="keycloakAuthenticationEntryPoint" class="org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationEntryPoint" /> 
    <bean id="keycloakAuthenticationProvider" class="org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider" /> 
    <bean id="keycloakPreAuthActionsFilter" class="org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter" /> 
    <bean id="keycloakAuthenticationProcessingFilter" class="org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter"> 
        <constructor-arg name="authenticationManager" ref="authenticationManager" /> 
    </bean> 
 
    <bean id="keycloakLogoutHandler" class="org.keycloak.adapters.springsecurity.authentication.KeycloakLogoutHandler"> 
            <constructor-arg ref="adapterDeploymentContextBean" /> 
    </bean> 
 
    <bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter"> 
        <constructor-arg name="logoutSuccessUrl" value="/" /> 
        <constructor-arg name="handlers"> 
            <list> 
                <ref bean="keycloakLogoutHandler" /> 
                <bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" /> 
            </list> 
        </constructor-arg> 
        <property name="logoutRequestMatcher"> 
            <bean class="org.springframework.security.web.util.matcher.AntPathRequestMatcher"> 
                <constructor-arg name="pattern" value="/sso/logout**" /> 
                <constructor-arg name="httpMethod" value="GET" /> 
            </bean> 
        </property> 
    </bean> 
 
    <security:http auto-config="false" entry-point-ref="keycloakAuthenticationEntryPoint"> 
        <security:custom-filter ref="keycloakPreAuthActionsFilter" before="LOGOUT_FILTER" /> 
        <security:custom-filter ref="keycloakAuthenticationProcessingFilter" before="FORM_LOGIN_FILTER" /> 
        <security:intercept-url pattern="/**" access="ROLE_USER" /> 
        <security:custom-filter ref="logoutFilter" position="LOGOUT_FILTER" /> 
    </security:http> 
 
</beans> 

key 斗篷.json
{ 
  "realm": "demorealm", 
  "realm-public-key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8g2TQ1HLuPryt0uygtRLQP29OQSTYcgLbrpCOhxvumghB+meTeI6eXdY3RT29oPI5C39oETo74eaoyG2eIKAfy/hcuQotEFwPus03iKAlXQFf5h7Sf8UUdCcCWNXakSpyCpkFqFlNcDJBdvUdgtogY4vznauCGexnP4lAuIlgdL7aYse1xUtWhNMVFjRr/fCnkabsJo+E6NqnjYmbnsuBrgeWB6chRP8CfnAK2Q4MeARIiSUZbXL8MX9etB4d15nc2llUl/PzDIJ7sD3U70+1LIU8bzanYErCxz7f07hx96kHHPLtH58r+d9YrjJtjMFsd9AO4r1YesdlnAshxPccwIDAQAB", 
  "auth-server-url": "https://mykeycloakurl.com/auth", 
  "ssl-required": "none", 
  "resource": "demo", 
  "credentials": { 
    "secret": "e140dbb8-22ba-4ba7-9b54-73e688e937da" 
  } 
} 

家庭 Controller .java
package org.demo.keycloak; 
 
import java.text.DateFormat; 
import java.util.Date; 
import java.util.Locale; 
 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
 
/** 
 * Handles requests for the application home page. 
 */ 
@Controller 
public class HomeController { 
 
  private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 
 
  /** 
   * Simply selects the home view to render by returning its name. 
   */ 
  @RequestMapping(value = "/home", method = RequestMethod.GET) 
  public String home(Locale locale, Model model) { 
    logger.info("Welcome home! The client locale is {}.", locale); 
 
    Date date = new Date(); 
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 
 
    String formattedDate = dateFormat.format(date); 
 
    model.addAttribute("serverTime", formattedDate ); 
 
    return "home"; 
  } 
 
} 



感谢任何帮助。

2015 年 8 月 18 日更新

在将级别设置为 JBoss Standalone 中的 DEBUG 并在我的应用程序的 log4j.xml 中添加记录器后,我从应用程序服务器(JBoss AS 7)日志文件中得到了这个。有点长,没办法贴到这里,所以贴了 here反而。希望它有所帮助。

2015 年 8 月 26 日更新

我尝试了另一种方法,即使用安全约束设置 web.xml 文件并删除 pom.xml 文件中的 spring 安全适配器引用,并改用 keycloak 核心和 keycloak 适配器核心。它现在重定向到我的 Keycloak 服务器。但是,当我使用用户名和密码登录时,我被重定向回 web url,但它返回一个错误,Http Status 403 Access to the specified resource () has been denied.我不确定我做错了什么。

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 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.demo</groupId> 
    <artifactId>keycloak</artifactId> 
    <name>demo-keycloak-mvc</name> 
    <packaging>war</packaging> 
    <version>1.0.0-BUILD-SNAPSHOT</version> 
    <properties> 
        <java-version>1.6</java-version> 
        <org.springframework-version>4.1.7.RELEASE</org.springframework-version> 
        <org.aspectj-version>1.6.10</org.aspectj-version> 
        <org.slf4j-version>1.6.6</org.slf4j-version> 
    </properties> 
    <dependencies> 
        <!-- Spring --> 
        <dependency> 
            <groupId>org.springframework</groupId> 
            <artifactId>spring-context</artifactId> 
            <version>${org.springframework-version}</version> 
            <exclusions> 
                <!-- Exclude Commons Logging in favor of SLF4j --> 
                <exclusion> 
                    <groupId>commons-logging</groupId> 
                    <artifactId>commons-logging</artifactId> 
                </exclusion> 
            </exclusions> 
        </dependency> 
        <dependency> 
            <groupId>org.springframework</groupId> 
            <artifactId>spring-webmvc</artifactId> 
            <version>${org.springframework-version}</version> 
        </dependency> 
        <dependency> 
            <groupId>org.springframework</groupId> 
            <artifactId>spring-web</artifactId> 
            <version>${org.springframework-version}</version> 
        </dependency> 
 
        <!-- AspectJ --> 
        <dependency> 
            <groupId>org.aspectj</groupId> 
            <artifactId>aspectjrt</artifactId> 
            <version>${org.aspectj-version}</version> 
        </dependency> 
 
        <!-- Logging --> 
        <dependency> 
            <groupId>org.slf4j</groupId> 
            <artifactId>slf4j-api</artifactId> 
            <version>${org.slf4j-version}</version> 
        </dependency> 
        <dependency> 
            <groupId>org.slf4j</groupId> 
            <artifactId>jcl-over-slf4j</artifactId> 
            <version>${org.slf4j-version}</version> 
            <scope>runtime</scope> 
        </dependency> 
        <dependency> 
            <groupId>org.slf4j</groupId> 
            <artifactId>slf4j-log4j12</artifactId> 
            <version>${org.slf4j-version}</version> 
            <scope>runtime</scope> 
        </dependency> 
        <dependency> 
            <groupId>log4j</groupId> 
            <artifactId>log4j</artifactId> 
            <version>1.2.15</version> 
            <exclusions> 
                <exclusion> 
                    <groupId>javax.mail</groupId> 
                    <artifactId>mail</artifactId> 
                </exclusion> 
                <exclusion> 
                    <groupId>javax.jms</groupId> 
                    <artifactId>jms</artifactId> 
                </exclusion> 
                <exclusion> 
                    <groupId>com.sun.jdmk</groupId> 
                    <artifactId>jmxtools</artifactId> 
                </exclusion> 
                <exclusion> 
                    <groupId>com.sun.jmx</groupId> 
                    <artifactId>jmxri</artifactId> 
                </exclusion> 
            </exclusions> 
            <scope>runtime</scope> 
        </dependency> 
 
        <!-- @Inject --> 
        <dependency> 
            <groupId>javax.inject</groupId> 
            <artifactId>javax.inject</artifactId> 
            <version>1</version> 
        </dependency> 
 
        <!-- Servlet --> 
        <dependency> 
            <groupId>javax.servlet</groupId> 
            <artifactId>servlet-api</artifactId> 
            <version>2.5</version> 
            <scope>provided</scope> 
        </dependency> 
        <dependency> 
            <groupId>javax.servlet.jsp</groupId> 
            <artifactId>jsp-api</artifactId> 
            <version>2.1</version> 
            <scope>provided</scope> 
        </dependency> 
        <dependency> 
            <groupId>javax.servlet</groupId> 
            <artifactId>jstl</artifactId> 
            <version>1.2</version> 
        </dependency> 
 
        <!-- Test --> 
        <dependency> 
            <groupId>junit</groupId> 
            <artifactId>junit</artifactId> 
            <version>4.7</version> 
            <scope>test</scope> 
        </dependency> 
 
 
        <!-- <dependency> 
            <groupId>cglib</groupId> 
            <artifactId>cglib-nodep</artifactId> 
            <version>2.2</version> 
        </dependency> --> 
 
        <dependency> 
            <groupId>org.keycloak</groupId> 
            <artifactId>keycloak-core</artifactId> 
            <version>1.4.0.Final</version> 
        </dependency> 
        <dependency> 
            <groupId>org.keycloak</groupId> 
            <artifactId>keycloak-adapter-core</artifactId> 
            <version>1.4.0.Final</version> 
        </dependency> 
    </dependencies> 
    <build> 
        <plugins> 
            <plugin> 
                <groupId>org.jboss.as.plugins</groupId> 
                <artifactId>jboss-as-maven-plugin</artifactId> 
                <version>7.7.Final</version> 
                <configuration> 
                    <skip>false</skip> 
                </configuration> 
            </plugin> 
            <plugin> 
                <artifactId>maven-eclipse-plugin</artifactId> 
                <version>2.9</version> 
                <configuration> 
                    <additionalProjectnatures> 
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
                    </additionalProjectnatures> 
                    <additionalBuildcommands> 
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
                    </additionalBuildcommands> 
                    <downloadSources>true</downloadSources> 
                    <downloadJavadocs>true</downloadJavadocs> 
                </configuration> 
            </plugin> 
            <plugin> 
                <groupId>org.apache.maven.plugins</groupId> 
                <artifactId>maven-compiler-plugin</artifactId> 
                <version>2.5.1</version> 
                <configuration> 
                    <source>1.6</source> 
                    <target>1.6</target> 
                    <compilerArgument>-Xlint:all</compilerArgument> 
                    <showWarnings>true</showWarnings> 
                    <showDeprecation>true</showDeprecation> 
                </configuration> 
            </plugin> 
            <plugin> 
                <groupId>org.codehaus.mojo</groupId> 
                <artifactId>exec-maven-plugin</artifactId> 
                <version>1.2.1</version> 
                <configuration> 
                    <mainClass>org.test.int1.Main</mainClass> 
                </configuration> 
            </plugin> 
        </plugins> 
    </build> 
</project> 

web.xml
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
 
    <!-- The definition of the Root Spring Container shared by all Servlets  
        and Filters --> 
    <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value>/WEB-INF/spring/root-context.xml</param-value> 
    </context-param> 
 
    <!-- Creates the Spring Container shared by all Servlets and Filters --> 
    <listener> 
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
 
    <!-- Processes application requests --> 
    <servlet> 
        <servlet-name>appServlet</servlet-name> 
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <init-param> 
            <param-name>contextConfigLocation</param-name> 
            <param-value> 
                /WEB-INF/spring/appServlet/servlet-context.xml, 
                /WEB-INF/spring/appServlet/security-context.xml 
            </param-value> 
        </init-param> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
 
    <servlet-mapping> 
        <servlet-name>appServlet</servlet-name> 
        <url-pattern>/</url-pattern> 
    </servlet-mapping> 
 
    <security-constraint> 
        <web-resource-collection> 
            <web-resource-name>Home</web-resource-name> 
            <url-pattern>/*</url-pattern> 
        </web-resource-collection> 
        <auth-constraint> 
            <role-name>ROLE_USER</role-name> 
        </auth-constraint> 
    </security-constraint> 
 
    <login-config> 
        <auth-method>KEYCLOAK</auth-method> 
        <realm-name>demorealm</realm-name> 
    </login-config> 
 
    <security-role> 
        <role-name>ROLE_ADMIN</role-name> 
    </security-role> 
    <security-role> 
        <role-name>ROLE_USER</role-name> 
    </security-role> 
 
</web-app> 

Keycloak 服务器配置:

境界:derealm

客户端设置:
  • 客户:演示
  • 客户端协议(protocol):openid-connect
  • 访问类型: secret
  • 有效重定向网址:http://localhost:8080/ *
  • 基本网址:http://localhost:8080

  • 客户范围:
  • 允许的全部范围:TRUE

  • 仍然没有运气。感谢任何帮助。

    请您参考如下方法:

    使用 Keycloak Spring Security Adapter 时,不应在同一项目中使用任何其他 Keycloak 适配器。

    您的配置文件看起来不错,但是您描述的行为听起来像是 Spring 没有采用您的安全规则。


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!