ldap authentication support
This commit is contained in:
parent
bb3311ddd5
commit
28c51e9eba
8 changed files with 69 additions and 38 deletions
|
@ -20,8 +20,8 @@ import javax.annotation.Resource;
|
|||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.app.web.RootAction;
|
||||
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.exentity.User;
|
||||
import org.codelibs.fess.exception.UserRoleLoginException;
|
||||
import org.codelibs.fess.mylasta.action.FessUserBean;
|
||||
import org.codelibs.fess.mylasta.direction.FessConfig;
|
||||
|
@ -40,7 +40,7 @@ import org.lastaflute.web.login.option.LoginSpecifiedOption;
|
|||
* @author jflute
|
||||
* @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 {
|
||||
|
||||
// ===================================================================================
|
||||
|
@ -67,8 +67,8 @@ public class FessLoginAssist extends TypicalLoginAssist<String, FessUserBean, Us
|
|||
}
|
||||
|
||||
@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()) {
|
||||
return ldapUser;
|
||||
}
|
||||
|
@ -76,25 +76,25 @@ public class FessLoginAssist extends TypicalLoginAssist<String, FessUserBean, Us
|
|||
}
|
||||
|
||||
@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 -> {
|
||||
cb.query().setName_Equal(username);
|
||||
cb.query().setPassword_Equal(cipheredPassword);
|
||||
});
|
||||
}).map(user -> (FessUser) user);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected OptionalEntity<User> doFindLoginUser(final String username) {
|
||||
protected OptionalEntity<FessUser> doFindLoginUser(final String username) {
|
||||
return userBhv.selectEntity(cb -> {
|
||||
cb.query().setName_Equal(username);
|
||||
});
|
||||
}).map(user -> (FessUser) user);
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
// Login Process
|
||||
// =============
|
||||
@Override
|
||||
protected FessUserBean createUserBean(final User user) {
|
||||
protected FessUserBean createUserBean(final FessUser user) {
|
||||
return new FessUserBean(user);
|
||||
}
|
||||
|
||||
|
@ -106,7 +106,7 @@ public class FessLoginAssist extends TypicalLoginAssist<String, FessUserBean, Us
|
|||
}
|
||||
|
||||
@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(() -> {
|
||||
insertLogin(user);
|
||||
});
|
||||
|
|
13
src/main/java/org/codelibs/fess/entity/FessUser.java
Normal file
13
src/main/java/org/codelibs/fess/entity/FessUser.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
package org.codelibs.fess.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public interface FessUser extends Serializable {
|
||||
|
||||
String getName();
|
||||
|
||||
String[] getRoleNames();
|
||||
|
||||
String[] getGroupNames();
|
||||
|
||||
}
|
|
@ -18,13 +18,14 @@ package org.codelibs.fess.es.user.exentity;
|
|||
import java.util.Base64;
|
||||
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.entity.FessUser;
|
||||
import org.codelibs.fess.es.user.bsentity.BsUser;
|
||||
import org.codelibs.fess.util.StreamUtil;
|
||||
|
||||
/**
|
||||
* @author FreeGen
|
||||
*/
|
||||
public class User extends BsUser {
|
||||
public class User extends BsUser implements FessUser {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
|
|
@ -15,16 +15,13 @@
|
|||
*/
|
||||
package org.codelibs.fess.helper.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Base64;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
@ -33,7 +30,6 @@ import javax.servlet.http.HttpServletRequest;
|
|||
|
||||
import org.codelibs.core.crypto.CachedCipher;
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.app.web.base.login.FessLoginAssist;
|
||||
import org.codelibs.fess.helper.RoleQueryHelper;
|
||||
import org.codelibs.fess.util.ComponentUtil;
|
||||
|
@ -115,14 +111,7 @@ public class RoleQueryHelperImpl implements RoleQueryHelper, Serializable {
|
|||
}
|
||||
|
||||
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) {
|
||||
roleList.addAll(defaultRoleList);
|
||||
|
|
|
@ -23,7 +23,7 @@ import javax.naming.directory.DirContext;
|
|||
import javax.naming.directory.InitialDirContext;
|
||||
|
||||
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.mylasta.direction.FessConfig;
|
||||
import org.codelibs.fess.util.ComponentUtil;
|
||||
|
@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory;
|
|||
public class LdapManager {
|
||||
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();
|
||||
String providerUrl = fessConfig.getLdapProviderUrl();
|
||||
|
||||
|
@ -54,9 +54,9 @@ public class LdapManager {
|
|||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Logged in.", ctx);
|
||||
}
|
||||
return OptionalEntity.of(new LdapUser(username));
|
||||
return OptionalEntity.of(createLdapUser(username, env));
|
||||
} catch (NamingException e) {
|
||||
logger.warn("Login failed.", e);
|
||||
logger.debug("Login failed.", e);
|
||||
} finally {
|
||||
if (ctx != null) {
|
||||
try {
|
||||
|
@ -68,4 +68,8 @@ public class LdapManager {
|
|||
}
|
||||
return OptionalEntity.empty();
|
||||
}
|
||||
|
||||
protected LdapUser createLdapUser(String username, Hashtable<String, String> env) {
|
||||
return new LdapUser(env, username);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,14 +15,38 @@
|
|||
*/
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
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.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) */
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final User user;
|
||||
private final FessUser user;
|
||||
|
||||
// ===================================================================================
|
||||
// Attribute
|
||||
|
@ -38,7 +38,7 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
|
|||
// ===================================================================================
|
||||
// Constructor
|
||||
// ===========
|
||||
public FessUserBean(final User user) {
|
||||
public FessUserBean(final FessUser user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
|
@ -54,11 +54,11 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
|
|||
// Accessor
|
||||
// ========
|
||||
public String[] getRoles() {
|
||||
return user.getRoles();
|
||||
return user.getRoleNames();
|
||||
}
|
||||
|
||||
public String[] getGroups() {
|
||||
return user.getGroups();
|
||||
return user.getGroupNames();
|
||||
}
|
||||
|
||||
public boolean hasRole(final String role) {
|
||||
|
|
|
@ -294,7 +294,7 @@
|
|||
<label for="ldapProviderUrl"
|
||||
class="col-sm-3 control-label"><la:message
|
||||
key="labels.ldapProviderUrl" /></label>
|
||||
<div class="form-inline col-sm-9">
|
||||
<div class="col-sm-9">
|
||||
<la:errors property="ldapProviderUrl" />
|
||||
<la:text property="ldapProviderUrl"
|
||||
styleClass="form-control" />
|
||||
|
@ -304,7 +304,7 @@
|
|||
<label for="ldapSecurityPrincipal"
|
||||
class="col-sm-3 control-label"><la:message
|
||||
key="labels.ldapSecurityPrincipal" /></label>
|
||||
<div class="form-inline col-sm-9">
|
||||
<div class="col-sm-9">
|
||||
<la:errors property="ldapSecurityPrincipal" />
|
||||
<la:text property="ldapSecurityPrincipal"
|
||||
styleClass="form-control" />
|
||||
|
|
Loading…
Add table
Reference in a new issue