java - 使用 Shiro 通过 LDAP 对用户进行身份验证

标签 java grails groovy ldap shiro

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

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

我有一个工作项目,并已成功运行快速启动-shiro,它构建了域 ShiroRole 和 ShiroUser、 Controller authController、 View 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

但是将所有这些碎片放在一起并没有让我有任何进展!我至少走在正确的轨道上吗?任何帮助将不胜感激!

最佳答案

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

关于java - 使用 Shiro 通过 LDAP 对用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324285/

相关文章:

grails - Grails升级-Java 1.8兼容性从1.3.7到2.4.1。如何在类路径中添加自定义jar

java - Groovy 打包到 Jar 中,无法使用 Maven 工作。由 : java. lang.AbstractMethodError 引起

java - 如何使用 Netty 编写异步 HttpServer

java - 在 tomcat html 输出中重写 URL

java - install4j 7 - Mac OSX 中的 handleQuit() 不再被调用

java - 如何使用java中的套接字从服务器向特定客户端发送字符串消息?

grails - 用户输入验证-Grails验证

facebook - grails spring-security-oauth-facebook:0.2

java - 除了 Java/Groovy 类之外,Groovy 脚本还有哪些用例?

Jenkins 共享库