Я пытаюсь настроить плагин Spring-security 2.0-RC2 для работы с моим приложением Grails. Я могу заставить его вставить моего администратора по умолчанию с хешированным паролем в mongodb. Я также настроил весеннюю безопасность для использования emailAddress
вместо username
в качестве поля имени пользователя для аутентификации.Ошибка аутентификации плагинов Grails Spring
Когда я пытаюсь войти (с правильными учетными данными), я получаю ошибку с ошибкой аутентификации. Я немного озадачен тем, что я делаю неправильно. Я, вероятно, пропустил что-то маленькое, из-за чего это не сработало. Моя конфигурация приведена ниже.
В Config.groovy
У меня есть стандартная конфигурация и укажите usernamePropertyName
, чтобы указать поле адреса электронной почты вместо имени пользователя.
grails.plugin.springsecurity.userLookup.userDomainClassName = 'model.Person'
grails.plugin.springsecurity.userLookup.usernamePropertyName='email'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'model.PersonRole'
grails.plugin.springsecurity.authority.className = 'model.Role'
grails.plugin.springsecurity.securityConfigType = SecurityConfigType.InterceptUrlMap
//Configure URL Restrictions
grails.plugin.springsecurity.interceptUrlMap = [
'/login/**': [
'IS_AUTHENTICATED_ANONYMOUSLY'
],
'/static/**': [
'IS_AUTHENTICATED_ANONYMOUSLY'
],
'/**': [
'IS_AUTHENTICATED_REMEMBERED']
]
grails.plugin.springsecurity.password.algorithm = 'SHA-256'
Я тогда Person.groovy
файла, который был создан с помощью пружинной безопасности затем модифицированную изменить имя пользователя на адрес электронной почты. Сгенерированные PersonRole.groovy
и Role.groovy
не были изменены.
package model
class Person {
transient springSecurityService
String id
String firstName
String lastName
String emailAddress
String password
boolean enabled = true
boolean accountExpired
boolean accountLocked
boolean passwordExpired
static transients = ['springSecurityService']
static constraints = {
emailAddress blank: false, unique: true
password blank: false
}
static mapping = { password column: '`password`' }
Set<Role> getAuthorities() {
PersonRole.findAllByPerson(this).collect { it.role } as Set
}
def beforeInsert() {
encodePassword()
}
def beforeUpdate() {
if (isDirty('password')) {
encodePassword()
}
}
protected void encodePassword() {
password = springSecurityService.encodePassword(password)
}
}
В моей BootStrap.groovy
я создаю пользователя по администратора по умолчанию, если один уже не существует:
def adminUser = Person.findByEmailAddress('[email protected]') ?: new Person(
firstName: 'Admin',
lastName: 'User',
emailAddress: '[email protected]',
password: springSecurityService.encodePassword('admin'),
enabled: true).save(failOnError: true)
Я также создал пользовательский auth.gsp
файл следующим образом, но я также попытался использовать по умолчанию один с тем же результат.
<form action="${postUrl}" method="POST" autocomplete="off">
<h4>Sign in</h4>
<g:if test="${flash.message}">
<div class="alert alert-danger" style="padding: 10px">${flash.message}</div>
</g:if>
<p>
<input type="email" class="form-control" placeholder="Email address" name="j_username" autofocus />
</p>
<p>
<input type="password" class="form-control" placeholder="Password" name="j_password" />
</p>
<input type="submit" class="btn btn-lg btn-primary btn-block" value="${message(code: 'springSecurity.login.button')}" />
</form>
Итак, кто-нибудь видит что-либо, что у меня отсутствует, что перестало бы проверять подлинность?
Свойство '' emailAddress' не email', как у вас есть в вашей конфигурации –
Ах хороший улов, я переработан и забыл изменить настройки там. Моя проблема была сочетанием этого и принятого ответа. Благодаря! – Michael