РЕДАКТИРОВАТЬ: я перечитал связанный вопрос и увидел, что пользователь установил плагин безопасности Spring в своем основном приложении. Я установил плагины Spring Security, и теперь код компилируется и запускается, но аутентификация LDAP не работает. Я знаю, что он действителен, так как работает в плагине, который я создал.
овном это почти так же, какэтот вопрос, Хотите установить плагины Spring Security только один раз, чтобы они использовались всеми моими приложениями. У меня есть плагин, в который я установил Spring Security Core и плагины LDAP. делаgrails run-app
на плагине прекрасно работает. В моем основном приложении я хочу иметь аннотации безопасности на контроллерах. Когда я пытаюсь загрузить этот плагин в основное приложение, появляется сообщение об ошибкеunable to resolve class grails.plugin.springsecurity.annotation.Secured import grails.plugin.springsecurity.annotation.Secured
, Когда я удаляю импорт и аннотацию из контроллера, безопасность даже не работает. Вот мой SecuritytreeGrailsPlugin.groovy с атрибутом, позволяющим объединить решение связанного вопроса и решение моего собственного. Что мне нужно добавить, чтобы все это работало? Я на Граале 2.3.11. Кстати, как бы я добавить другие статические правила в будущем? Нужно ли мне снова редактировать GrailsPlugin или я могу добавить его в приложение?Config.groovy
?
SecuritytreeGrailsPlugin.groovy (некоторые настройки LDAP были специально пропущены)
import grails.plugin.springsecurity.SpringSecurityUtils
import grails.plugin.springsecurity.SecurityFilterPosition
import Securitytree.MyUserDetailsContextMapper
class SecuritytreeGrailsPlugin {
// the plugin version
def version = "0.1"
// the version or versions of Grails the plugin is designed for
def grailsVersion = "2.3 > *"
// resources that are excluded from plugin packaging
def pluginExcludes = [
"grails-app/views/error.gsp"
]
// TODO Fill in these fields
def title = "Securitytree Plugin" // Headline display name of the plugin
def author = "
def authorEmail = ""
def description = '''\
'''
// URL to the plugin's documentation
def documentation = "http://grails.org/plugin/de"
// Extra (optional) plugin metadata
// License: one of 'APACHE', 'GPL2', 'GPL3'
// def license = "APACHE"
// Details of company behind the plugin (if there is one)
// def organization = [ name: "My Company", url: "http://www.my-company.com/" ]
// Any additional developers beyond the author specified above.
// def developers = [ [ name: "Joe Bloggs", email: "[email protected]" ]]
// Location of the plugin's issue tracker.
// def issueManagement = [ system: "JIRA", url: "http://jira.grails.org/browse/GPMYPLUGIN" ]
// Online location of the plugin's browseable source code.
// def scm = [ url: "http://svn.codehaus.org/grails-plugins/" ]
def doWithWebDescriptor = { xml ->
// TODO Implement additions to web.xml (optional), this event occurs before
}
def doWithSpring = {
// TODO Implement runtime spring config (optional)
beans = {
ldapUserDetailsMapper(MyUserDetailsContextMapper) {
// bean attributes
}
}
}
def doWithDynamicMethods = { ctx ->
// TODO Implement registering dynamic methods to classes (optional)
}
def doWithApplicationContext = { ctx ->
// TODO Implement post initialization spring config (optional)
// Added by the Spring Security Core plugin:
SpringSecurityUtils.securityConfig.userLookup.userDomainClassName = 'Securitytree.User'
SpringSecurityUtils.securityConfig.userLookup.authorityJoinClassName = 'Securitytree.UserRole'
SpringSecurityUtils.securityConfig.authority.className = 'Securitytree.Role'
// LDAP using TrakFast server
SpringSecurityUtils.securityConfig.ldap.context. managerDn = 'CN=Grails LDAP SA,DC=com,DC=trakfast'
SpringSecurityUtils.securityConfig.ldap.context. managerPassword = 'I3KU96oDK5'
SpringSecurityUtils.securityConfig.ldap.context. server = 'ldap://trakdomain01.trakfast.com:498'
SpringSecurityUtils.securityConfig.ldap.search.filter= '(sAMAccountName={0})'
SpringSecurityUtils.securityConfig.ldap.authorities.retrieveDatabaseRoles = true
SpringSecurityUtils.securityConfig.controllerAnnotations.staticRules = [
'/': ['permitAll'],
'/index': ['permitAll'],
'/index.gsp': ['permitAll'],
'/assets/**': ['permitAll'],
'/**/js/**': ['permitAll'],
'/**/css/**': ['permitAll'],
'/**/images/**': ['permitAll'],
'/**/favicon.ico': ['permitAll']
]
// Added to change Denied Access page
SpringSecurityUtils.securityConfig.adh.errorPage = null
SpringSecurityUtils.securityConfig.logout.postOnly = false
}
def onChange = { event ->
// TODO Implement code that is executed when any artefact that this plugin is
// watching is modified and reloaded. The event contains: event.source,
// event.application, event.manager, event.ctx, and event.plugin.
}
def onConfigChange = { event ->
// TODO Implement code that is executed when the project configuration changes.
// The event is the same as for 'onChange'.
}
def onShutdown = { event ->
// TODO Implement code that is executed when the application shuts down (optional)
}
}
Я полагал, что нет смысла включать код контроллера, но если я ошибаюсь, то могу поделиться им.
РЕДАКТИРОВАТЬ: я перечитал связанный вопрос и увидел, что пользователь установил плагин безопасности Spring в своем основном приложении. Я установил плагины Spring Security, и теперь код компилируется и запускается, но аутентификация LDAP не работает. Я знаю, что он действителен, так как работает в плагине, который я создал.