Procházet zdrojové kódy

ldap authentication support

Shinsuke Sugaya před 9 roky
rodič
revize
28c51e9eba

+ 10 - 10
src/main/java/org/codelibs/fess/app/web/base/login/FessLoginAssist.java

@@ -20,8 +20,8 @@ import javax.annotation.Resource;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.app.web.RootAction;
 import org.codelibs.fess.app.web.RootAction;
 import org.codelibs.fess.app.web.login.LoginAction;
 import org.codelibs.fess.app.web.login.LoginAction;
+import org.codelibs.fess.entity.FessUser;
 import org.codelibs.fess.es.user.exbhv.UserBhv;
 import org.codelibs.fess.es.user.exbhv.UserBhv;
-import org.codelibs.fess.es.user.exentity.User;
 import org.codelibs.fess.exception.UserRoleLoginException;
 import org.codelibs.fess.exception.UserRoleLoginException;
 import org.codelibs.fess.mylasta.action.FessUserBean;
 import org.codelibs.fess.mylasta.action.FessUserBean;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.mylasta.direction.FessConfig;
@@ -40,7 +40,7 @@ import org.lastaflute.web.login.option.LoginSpecifiedOption;
  * @author jflute
  * @author jflute
  * @author shinsuke
  * @author shinsuke
  */
  */
-public class FessLoginAssist extends TypicalLoginAssist<String, FessUserBean, User> // #change_it also UserBean
+public class FessLoginAssist extends TypicalLoginAssist<String, FessUserBean, FessUser> // #change_it also UserBean
         implements LoginManager {
         implements LoginManager {
 
 
     // ===================================================================================
     // ===================================================================================
@@ -67,8 +67,8 @@ public class FessLoginAssist extends TypicalLoginAssist<String, FessUserBean, Us
     }
     }
 
 
     @Override
     @Override
-    public OptionalEntity<User> findLoginUser(String username, String password) {
-        OptionalEntity<User> ldapUser = ComponentUtil.getLdapManager().login(username, password);
+    public OptionalEntity<FessUser> findLoginUser(String username, String password) {
+        OptionalEntity<FessUser> ldapUser = ComponentUtil.getLdapManager().login(username, password);
         if (ldapUser.isPresent()) {
         if (ldapUser.isPresent()) {
             return ldapUser;
             return ldapUser;
         }
         }
@@ -76,25 +76,25 @@ public class FessLoginAssist extends TypicalLoginAssist<String, FessUserBean, Us
     }
     }
 
 
     @Override
     @Override
-    protected OptionalEntity<User> doFindLoginUser(final String username, final String cipheredPassword) {
+    protected OptionalEntity<FessUser> doFindLoginUser(final String username, final String cipheredPassword) {
         return userBhv.selectEntity(cb -> {
         return userBhv.selectEntity(cb -> {
             cb.query().setName_Equal(username);
             cb.query().setName_Equal(username);
             cb.query().setPassword_Equal(cipheredPassword);
             cb.query().setPassword_Equal(cipheredPassword);
-        });
+        }).map(user -> (FessUser) user);
     }
     }
 
 
     @Override
     @Override
-    protected OptionalEntity<User> doFindLoginUser(final String username) {
+    protected OptionalEntity<FessUser> doFindLoginUser(final String username) {
         return userBhv.selectEntity(cb -> {
         return userBhv.selectEntity(cb -> {
             cb.query().setName_Equal(username);
             cb.query().setName_Equal(username);
-        });
+        }).map(user -> (FessUser) user);
     }
     }
 
 
     // ===================================================================================
     // ===================================================================================
     //                                                                       Login Process
     //                                                                       Login Process
     //                                                                       =============
     //                                                                       =============
     @Override
     @Override
-    protected FessUserBean createUserBean(final User user) {
+    protected FessUserBean createUserBean(final FessUser user) {
         return new FessUserBean(user);
         return new FessUserBean(user);
     }
     }
 
 
@@ -106,7 +106,7 @@ public class FessLoginAssist extends TypicalLoginAssist<String, FessUserBean, Us
     }
     }
 
 
     @Override
     @Override
-    protected void saveLoginHistory(final User user, final FessUserBean userBean, final LoginSpecifiedOption option) {
+    protected void saveLoginHistory(final FessUser user, final FessUserBean userBean, final LoginSpecifiedOption option) {
         asyncManager.async(() -> {
         asyncManager.async(() -> {
             insertLogin(user);
             insertLogin(user);
         });
         });

+ 13 - 0
src/main/java/org/codelibs/fess/entity/FessUser.java

@@ -0,0 +1,13 @@
+package org.codelibs.fess.entity;
+
+import java.io.Serializable;
+
+public interface FessUser extends Serializable {
+
+    String getName();
+
+    String[] getRoleNames();
+
+    String[] getGroupNames();
+
+}

+ 2 - 1
src/main/java/org/codelibs/fess/es/user/exentity/User.java

@@ -18,13 +18,14 @@ package org.codelibs.fess.es.user.exentity;
 import java.util.Base64;
 import java.util.Base64;
 
 
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.Constants;
+import org.codelibs.fess.entity.FessUser;
 import org.codelibs.fess.es.user.bsentity.BsUser;
 import org.codelibs.fess.es.user.bsentity.BsUser;
 import org.codelibs.fess.util.StreamUtil;
 import org.codelibs.fess.util.StreamUtil;
 
 
 /**
 /**
  * @author FreeGen
  * @author FreeGen
  */
  */
-public class User extends BsUser {
+public class User extends BsUser implements FessUser {
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 
 

+ 1 - 12
src/main/java/org/codelibs/fess/helper/impl/RoleQueryHelperImpl.java

@@ -15,16 +15,13 @@
  */
  */
 package org.codelibs.fess.helper.impl;
 package org.codelibs.fess.helper.impl;
 
 
-import java.io.IOException;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.ArrayList;
-import java.util.Base64;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.Set;
 
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PostConstruct;
@@ -33,7 +30,6 @@ import javax.servlet.http.HttpServletRequest;
 
 
 import org.codelibs.core.crypto.CachedCipher;
 import org.codelibs.core.crypto.CachedCipher;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.core.lang.StringUtil;
-import org.codelibs.fess.Constants;
 import org.codelibs.fess.app.web.base.login.FessLoginAssist;
 import org.codelibs.fess.app.web.base.login.FessLoginAssist;
 import org.codelibs.fess.helper.RoleQueryHelper;
 import org.codelibs.fess.helper.RoleQueryHelper;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.ComponentUtil;
@@ -115,14 +111,7 @@ public class RoleQueryHelperImpl implements RoleQueryHelper, Serializable {
         }
         }
 
 
         final FessLoginAssist fessLoginAssist = ComponentUtil.getComponent(FessLoginAssist.class);
         final FessLoginAssist fessLoginAssist = ComponentUtil.getComponent(FessLoginAssist.class);
-        fessLoginAssist.getSessionUserBean().ifPresent(
-                fessUserBean -> StreamUtil.of(fessUserBean.getRoles()).map(role -> Base64.getDecoder().decode(role)).map(role -> {
-                    try {
-                        return Optional.of(new String(role, Constants.UTF_8));
-                    } catch (final IOException e) {
-                        return null;
-                    }
-                }).forEach(role -> role.ifPresent(roleList::add)));
+        fessLoginAssist.getSessionUserBean().ifPresent(fessUserBean -> StreamUtil.of(fessUserBean.getRoles()).forEach(roleList::add));
 
 
         if (defaultRoleList != null) {
         if (defaultRoleList != null) {
             roleList.addAll(defaultRoleList);
             roleList.addAll(defaultRoleList);

+ 8 - 4
src/main/java/org/codelibs/fess/ldap/LdapManager.java

@@ -23,7 +23,7 @@ import javax.naming.directory.DirContext;
 import javax.naming.directory.InitialDirContext;
 import javax.naming.directory.InitialDirContext;
 
 
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.core.lang.StringUtil;
-import org.codelibs.fess.es.user.exentity.User;
+import org.codelibs.fess.entity.FessUser;
 import org.codelibs.fess.filter.AdLoginInfoFilter;
 import org.codelibs.fess.filter.AdLoginInfoFilter;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.codelibs.fess.util.ComponentUtil;
@@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory;
 public class LdapManager {
 public class LdapManager {
     private static final Logger logger = LoggerFactory.getLogger(AdLoginInfoFilter.class);
     private static final Logger logger = LoggerFactory.getLogger(AdLoginInfoFilter.class);
 
 
-    public OptionalEntity<User> login(String username, String password) {
+    public OptionalEntity<FessUser> login(String username, String password) {
         FessConfig fessConfig = ComponentUtil.getFessConfig();
         FessConfig fessConfig = ComponentUtil.getFessConfig();
         String providerUrl = fessConfig.getLdapProviderUrl();
         String providerUrl = fessConfig.getLdapProviderUrl();
 
 
@@ -54,9 +54,9 @@ public class LdapManager {
             if (logger.isDebugEnabled()) {
             if (logger.isDebugEnabled()) {
                 logger.debug("Logged in.", ctx);
                 logger.debug("Logged in.", ctx);
             }
             }
-            return OptionalEntity.of(new LdapUser(username));
+            return OptionalEntity.of(createLdapUser(username, env));
         } catch (NamingException e) {
         } catch (NamingException e) {
-            logger.warn("Login failed.", e);
+            logger.debug("Login failed.", e);
         } finally {
         } finally {
             if (ctx != null) {
             if (ctx != null) {
                 try {
                 try {
@@ -68,4 +68,8 @@ public class LdapManager {
         }
         }
         return OptionalEntity.empty();
         return OptionalEntity.empty();
     }
     }
+
+    protected LdapUser createLdapUser(String username, Hashtable<String, String> env) {
+        return new LdapUser(env, username);
+    }
 }
 }

+ 28 - 4
src/main/java/org/codelibs/fess/ldap/LdapUser.java

@@ -15,14 +15,38 @@
  */
  */
 package org.codelibs.fess.ldap;
 package org.codelibs.fess.ldap;
 
 
-import org.codelibs.fess.es.user.exentity.User;
+import java.util.Hashtable;
 
 
-public class LdapUser extends User {
+import org.codelibs.core.lang.StringUtil;
+import org.codelibs.fess.entity.FessUser;
+
+public class LdapUser implements FessUser {
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 
 
-    public LdapUser(String username) {
-        setId(username);
+    protected Hashtable<String, String> env;
+
+    protected String name;
+
+    public LdapUser(Hashtable<String, String> env, String name) {
+        this.env = env;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String[] getRoleNames() {
+        // TODO
+        return StringUtil.EMPTY_STRINGS;
     }
     }
 
 
+    @Override
+    public String[] getGroupNames() {
+        // TODO
+        return StringUtil.EMPTY_STRINGS;
+    }
 }
 }

+ 5 - 5
src/main/java/org/codelibs/fess/mylasta/action/FessUserBean.java

@@ -15,7 +15,7 @@
  */
  */
 package org.codelibs.fess.mylasta.action;
 package org.codelibs.fess.mylasta.action;
 
 
-import org.codelibs.fess.es.user.exentity.User;
+import org.codelibs.fess.entity.FessUser;
 import org.codelibs.fess.util.StreamUtil;
 import org.codelibs.fess.util.StreamUtil;
 import org.lastaflute.web.login.TypicalUserBean;
 import org.lastaflute.web.login.TypicalUserBean;
 
 
@@ -29,7 +29,7 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
     //                                                                          ==========
     //                                                                          ==========
     /** The serial version UID for object serialization. (Default) */
     /** The serial version UID for object serialization. (Default) */
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
-    private final User user;
+    private final FessUser user;
 
 
     // ===================================================================================
     // ===================================================================================
     //                                                                           Attribute
     //                                                                           Attribute
@@ -38,7 +38,7 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
     // ===================================================================================
     // ===================================================================================
     //                                                                         Constructor
     //                                                                         Constructor
     //                                                                         ===========
     //                                                                         ===========
-    public FessUserBean(final User user) {
+    public FessUserBean(final FessUser user) {
         this.user = user;
         this.user = user;
     }
     }
 
 
@@ -54,11 +54,11 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
     //                                                                            Accessor
     //                                                                            Accessor
     //                                                                            ========
     //                                                                            ========
     public String[] getRoles() {
     public String[] getRoles() {
-        return user.getRoles();
+        return user.getRoleNames();
     }
     }
 
 
     public String[] getGroups() {
     public String[] getGroups() {
-        return user.getGroups();
+        return user.getGroupNames();
     }
     }
 
 
     public boolean hasRole(final String role) {
     public boolean hasRole(final String role) {

+ 2 - 2
src/main/webapp/WEB-INF/view/admin/general/admin_general.jsp

@@ -294,7 +294,7 @@
 										<label for="ldapProviderUrl"
 										<label for="ldapProviderUrl"
 											class="col-sm-3 control-label"><la:message
 											class="col-sm-3 control-label"><la:message
 												key="labels.ldapProviderUrl" /></label>
 												key="labels.ldapProviderUrl" /></label>
-										<div class="form-inline col-sm-9">
+										<div class="col-sm-9">
 											<la:errors property="ldapProviderUrl" />
 											<la:errors property="ldapProviderUrl" />
 											<la:text property="ldapProviderUrl"
 											<la:text property="ldapProviderUrl"
 												styleClass="form-control" />
 												styleClass="form-control" />
@@ -304,7 +304,7 @@
 										<label for="ldapSecurityPrincipal"
 										<label for="ldapSecurityPrincipal"
 											class="col-sm-3 control-label"><la:message
 											class="col-sm-3 control-label"><la:message
 												key="labels.ldapSecurityPrincipal" /></label>
 												key="labels.ldapSecurityPrincipal" /></label>
-										<div class="form-inline col-sm-9">
+										<div class="col-sm-9">
 											<la:errors property="ldapSecurityPrincipal" />
 											<la:errors property="ldapSecurityPrincipal" />
 											<la:text property="ldapSecurityPrincipal"
 											<la:text property="ldapSecurityPrincipal"
 												styleClass="form-control" />
 												styleClass="form-control" />