2016-07-21 3 views
1

Я пробовал без успеха настроить страницу входа в весеннее ядро ​​безопасности 3.1.1. Я создал каталог входа в каталог представлений и auth.gsp в каталоге входа в систему и разместил там свою собственную форму. Вот код:Как настроить весенний плагин безопасности Страница входа в grails

<g:form name="form-login" method="POST" action="${resource('file': 'j_spring_security_check')}"> 
    <label for="j_username">Username:</label> 
     <g:textField name="j_username"/> 
       <label for="j_password">Password:</label> 
       <g:passwordField name="j_password"/> 
      <g:submitButton name="login" value="Log in" /> 
    </g:form> 

Он принимает имя пользователя и пароль в порядке, но при нажатии на кнопку входа, он все еще показывает форму. Любые решения.

ответ

2

Это старая форма, использующая старый адрес action (основная проблема, вызывающая перенаправление) и старые имена для имени пользователя/пароля (скрытая проблема, которая была бы более расстраивающей, поскольку она всегда терпит неудачу с правильными значениями, поскольку они 'не могут использоваться, если они установлены для неправильных имен параметров).

Это не так просто в 3.x, как это было в 2.x, чтобы переопределить файлы плагинов. В плагинах 2.x хранятся файлы zip, распакованные в каталоге вашего проекта target, и вы можете делать правильные и/или сумасшедшие вещи с помощью источника плагина. В 3.x плагины составлены банками, поэтому, надеюсь, мы сократили общее количество сумасшедших, но мы также усложнили выполнение подобных действий.

Но это программное обеспечение с открытым исходным кодом, а точный .gsp-файл или тот, который достаточно близко, очень легко найти в исходном репо, которое равно here.

auth.gsp изменение редко, так что это нормально, чтобы получить latest file from the master branch, или вы могли бы посмотреть историю (recentl билдов и будущее строит по-прежнему будет помечено), поэтому было бы легко получить старую версию, например, from version 3.0.4.

Это не обязательно окончательный ответ, хотя из-за того, что плагин очень настраиваемый, и вы можете переопределить несколько переменных, используемых в GSP, в конфигурации, поэтому вы должны заменить код, который ищет значения только с значениями, поскольку ваше приложение маловероятно чтобы извлечь выгоду из этой гибкости. Настройки по умолчанию для параметров конфигурации находятся в DefaultSecurityConfig.groovy, но я оставил эти GSP внутри кода поиска, поэтому вам просто нужно удалить это и сохранить значения.

Вот внутренний form элемент (вам нужен весь файл, но я не показаны детали, которые не нужны изменения):

<form action="${postUrl ?: '/login/authenticate'}" method="POST" id="loginForm" class="cssform" autocomplete="off"> 
    <p> 
     <label for="username"><g:message code='springSecurity.login.username.label'/>:</label> 
     <input type="text" class="text_" name="${usernameParameter ?: 'username'}" id="username"/> 
    </p> 

    <p> 
     <label for="password"><g:message code='springSecurity.login.password.label'/>:</label> 
     <input type="password" class="text_" name="${passwordParameter ?: 'password'}" id="password"/> 
    </p> 

    <p id="remember_me_holder"> 
     <input type="checkbox" class="chk" name="${rememberMeParameter ?: 'remember-me'}" id="remember_me" <g:if test='${hasCookie}'>checked="checked"</g:if>/> 
     <label for="remember_me"><g:message code='springSecurity.login.remember.me.label'/></label> 
    </p> 

    <p> 
     <input type="submit" id="submit" value="${message(code: 'springSecurity.login.button')}"/> 
    </p> 
</form> 

и для начального прохода вы хотели бы изменить его это:

<form action="/login/authenticate' method="POST" id="loginForm" class="cssform" autocomplete="off"> 
    <p> 
     <label for="username"><g:message code='springSecurity.login.username.label'/>:</label> 
     <input type="text" class="text_" name="username" id="username"/> 
    </p> 

    <p> 
     <label for="password"><g:message code='springSecurity.login.password.label'/>:</label> 
     <input type="password" class="text_" name="password" id="password"/> 
    </p> 

    <p id="remember_me_holder"> 
     <input type="checkbox" class="chk" name="remember-me" id="remember_me"/> 
     <label for="remember_me"><g:message code='springSecurity.login.remember.me.label'/></label> 
    </p> 

    <p> 
     <input type="submit" id="submit" value="${message(code: 'springSecurity.login.button')}"/> 
    </p> 
</form> 

вы можете использовать любой почтовый URL и имя пользователя/имена Param пароля, которые вы хотите, включая старые, но вы должны установить свойство конфигурации около того фильтра Spring Security, который обрабатывает логины смотрит на правильном URI и ожидает, что param n которые вы отправляете. Если вы в порядке со значениями по умолчанию, это будет работать, и вы можете, конечно, сделать любые обычные изменения HTML и CSS/JS, которые вы хотите.