2017-03-09 216 views
1

我正在創建一個Spring Boot應用程序,該應用程序只能由LDAP中的用戶訪問。此應用程序應該部署到Tomcat服務器(而不是嵌入式服務器)。對LDAP的配置在Tomcat本身做:通過Tomcat進行Spring Boot LDAP身份驗證(預認證)

<Realm className="org.apache.catalina.realm.LockOutRealm"> 
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
     resourceName="UserDatabase"/> 
    <Realm className="org.apache.catalina.realm.JNDIRealm" 
     connectionURL="ldap://someldapserver:389" 
     userPattern="uid={0},dc=example,dc=com" 
     roleBase="dc=example,dc=com" 
     roleName="cn" 
     roleSearch="(uniqueMember={0})"/> 
</Realm> 

如果我嘗試訪問Tomcat經理,我可以與LDAP身份驗證憑據,所以連接基本工作原理。

這是我的配置:

@Configuration 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .antMatchers("/test").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin().permitAll() 
       .and() 
      .logout().permitAll() 
       .and() 
      .csrf().disable(); 
    } 
} 

我知道我可以配置直接在應用程序(authenticationManagerBuilder.ldapAuthentication()...)LDAP連接,但是這不是我想要的。

如何告訴Spring Boot使用來自Tomcat的LDAP身份驗證進行應用程序?

UPDATE

它看起來像我不得不啓用Pre-Authentication。這可以通過.and().jee().mappableRoles("ROLE_ADMIN")完成。這似乎工作,但我仍然無法驗證:No pre-authenticated principal found in request

我需要爲Tomcats配置添加一些東西嗎?

回答

1

我找不到任何合適的解決方案,因此我完全刪除了Spring Security並將限制條件添加到web.xml。通過context.xml,可以設置身份驗證方法(例如,如果您希望切換到tomcat-users.xml身份驗證,請參閱下面的示例)。然後通過Tomcat進行身份驗證。

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app> 
    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Authentication</web-resource-name> 
      <url-pattern>/test/test</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>users</role-name> 
     </auth-constraint> 
    </security-constraint> 
    <login-config> 
     <auth-method>BASIC</auth-method> 
    </login-config> 
    <security-role> 
     <role-name>users</role-name> 
    </security-role> 
</web-app> 

的context.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
</Context>