jeesite1.2.7 shiro如何集成LDAP实现多种校验共存

本文介绍了如何在Jeesite 1.2.7中集成Shiro和LDAP,以实现多账号体系下通过邮箱地址进行统一登录。通过自定义LdapAuthorizingRealm继承JndiLdapRealm,并在Spring配置文件中添加该Realm,确保账号email地址与LDAP中的记录匹配。认证策略采用AtLeastOneSuccessfulStrategy,即只要有任一Realm验证成功即视为登录成功。
摘要由CSDN通过智能技术生成

因为公司内部系统多,账号体系多,现需要实现统一账号账号登录不同系统,现采用LDAP来管理账号。
刚好shiro也提供LDAP的支持,结合网上资料写下如下内容。

总体方案

  1. jeesite现有账号体系用户自己维护email地址与LDAP中存储的email地址一一对应
  2. 自定义LdapAuthorizingRealm继承JndiLdapRealm类,重写里面方法。
  3. 在spring-context-shiro.xml添加自定义realm

代码实现

  1. 自定义LdapAuthorizingRealm

package com.xxx.modules.sys.security;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.naming.AuthenticationNotSupportedException;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.LdapContext;

import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.ldap.UnsupportedAuthenticationMechanismException;
import org.apache.shiro.realm.ldap.JndiLdapRealm;
import org.apache.shiro.realm.ldap.LdapContextFactory;
import org.apache.shiro.realm.ldap.LdapUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



/**
 * LdapRealm
 * @author huangkai
 *
 */
public class LdapAuthorizingRealm extends JndiLdapRealm{
   
	private Logger logger = LoggerFactory.getLogger(getClass());
	
	private SystemService systemService;
	
	private String rootDN;

    public String getRootDN() {
   
        return rootDN;
    }

    public void setRootDN(String rootDN) {
   
        this.rootDN = rootDN;
    }

	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken){
   
		UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
		
		// 校验登录验证码
		if (LoginController.isValidateCodeLogin(token.getUsername
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台。 JeeSite本身是以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎。 JeeSite主要定位于企业信息化领域,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件、数据权限组件、数据字典组件、核心工具组件、视图操作组件、工作流组件、代码生成等。前端界面风格采用了结构简单、性能优良、页面美观大气的Twitter Bootstrap页面展示框架。采用分层设计、双重验证、提交数据安全编码、密码加密、访问验证、数据权限验证。使用Maven做项目管理,提高项目的易开发性、扩展性。 JeeSite目前包括以下三大模块,系统管理(SYS)模块、内容管理(CMS)模块、在线办公(OA)模块、代码生成(GEN)模块。 系统管理模块 ,包括企业组织架构(用户管理、机构管理、区域管理)、菜单管理、角色权限管理、字典管理等功能; 内容管理模块 ,包括内容管理(文章、链接),栏目管理、站点管理、公共留言、文件管理、前端网站展示等功能; 在线办公模块 ,提供简单的请假流程实例。 JeeSite 提供了常用工具进行封装,包括日志工具、缓存工具、服务器端验证、数据字典、当前组织机构数据(用户、机构、区域)以及其它常用小工具等。另外还提供一个强大的在线 代码生成 工具,此工具提供简单的单表、一对多、树结构功能的生成,如果对外观要求不是很高,生成的功能就可以用了。如果你使用了JeeSite基础框架,就可以很高效的快速开发出,优秀的信息管理系统。 2.内置功能 1.用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2.机构管理:配置系统组织机构(公司、部门、小组),树结构展现,可随意调整上下级。 3.区域管理:系统城市区域模型,如:国家、省市、地市、区县的维护。 4.菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5.角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6.字典管理:对系统中经常使用的一些较为固定的数据进行维护,如:是否、男女、类别、级别等。 7.操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 8.连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 9.工作流引擎:实现业务工单流转、在线流程设计器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值