【问题标题】:Authenticating users via LDAP with Shiro使用 Shiro 通过 LDAP 对用户进行身份验证
【发布时间】:2015-09-28 05:31:01
【问题描述】:

java/groovy/grails/shiro/you-name-it 的新手,请耐心等待。我已经用尽了教程和所有可用的“Shiro LDAP”搜索,但仍然无法让我的项目正常工作。

我在 GGTS 上使用 jdk1.7.0_80、Grails 2.3.0 和 Shiro 1.2.1 运行所有这些。

我有一个工作项目并成功运行 quick-start-shiro,它构建了域 ShiroRole 和 ShiroUser、控制器 authController、视图 login.gsp 和 relam ShiroDbRealm。我在 BootStrap 中创建了一个虚假用户,使用

def user = new ShiroUser(username: "user123", passwordHash: new Sha256Hash("password").toHex())
user.addToPermissions("*:*")
user.save()

并且可以成功登录我的主页,并且出于所有意图和目的,这就是我所得到的。我找不到关于如何使用我的用户名和密码(通过我可用的 LDAP 服务器进行身份验证)登录的自上而下的教程。据我了解,我需要创建一个 shiro.ini 文件并包含类似于

的内容
[main]
ldapRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
ldapRealm.url = ldap://MYURLHERE/

但是我什至不知道把这个 shiro.ini 文件放在哪里。我见过/src/main/resources,但没有这样的目录。我是手动创建还是创建一些脚本?

下一步似乎是创建 SecurityManager,它以某种方式读取 shiro.ini,代码如下:

Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("actived.ini");

// Setting up the SecurityManager...
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);

然而,这总是出现在教程中的一些 Java 文件中,但我的项目是 GGTS 中的一个 Groovy 项目。我是否需要创建一个 Java 文件并将其放在 src/java 或类似的地方?

我最近发现我可能需要一个 ShiroLdapRealm 文件(类似于 ShiroDbRealm),其中包含如下信息

def appConfig = grailsApplication.config
def ldapUrls = appConfig.ldap.server.url ?: [ "ldap://MYURLHERE/" ]
def searchBase = appConfig.ldap.search.base ?: ""
def searchUser = appConfig.ldap.search.user ?: ""
def searchPass = appConfig.ldap.search.pass ?: ""
def usernameAttribute = appConfig.ldap.username.attribute ?: "uid"
def skipAuthc = appConfig.ldap.skip.authentication ?: false
def skipCredChk = appConfig.ldap.skip.credentialsCheck ?: false
def allowEmptyPass = appConfig.ldap.allowEmptyPasswords != [:] ? appConfig.ldap.allowEmptyPasswords : true

以及Config中的相应信息

ldap.server.url = ["ldap://MYRULHERE/"]
ldap.search.base = 'dc=COMPANYNAME,dc=com'
ldap.search.user = ''       // if empty or null --> anonymous user lookup
ldap.search.pass = 'password'                // only used with     non-anonymous lookup
ldap.username.attribute = 'AccountName'
ldap.referral = "follow"
ldap.skip.credentialsCheck = false
ldap.allowEmptyPasswords = false
ldap.skip.authentication = false

但是将所有这些部分放在一起并没有让我有任何收获!我至少在正确的轨道上吗?任何帮助将不胜感激!

【问题讨论】:

    标签: java grails groovy ldap shiro


    【解决方案1】:

    对于/src/main/resources,如果您在项目中使用 maven,它将自动为您创建。此外,您还可以手动创建该目录。

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2010-12-15
      相关资源
      最近更新 更多