2016-08-15 122 views
0

我在Grails GSP中使用BootStrap,我在其代码下面有一个登录模式,我使用spring security plugin来处理登录,我如何返回到此模式并显示闪存消息以防万一输入的用户名和密码是错误的。BootStrap和Grails

登录模态代码:

<sec:ifNotLoggedIn> 
    <li> <a href="#" data-toggle="modal" data-target="#login-modal" class="btn navbar-btn btn-white"><i class="fa fa-sign-in"></i>Log in</a> <%--<g:link controller="login" action="auth">Login</g:link></li>--%> 
     </sec:ifNotLoggedIn> 
<!-- *** LOGIN MODAL ***_________________________________________________________ 
--> 
<div id="login-modal" tabindex="-1" role="dialog" aria-labelledby="Login" aria-hidden="true" class="modal fade"> 
    <div class="modal-dialog modal-sm"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" data-dismiss="modal" aria-hidden="true" class="close">×</button> 
     <h4 id="Login" class="modal-title">Customer login</h4> 
     </div> 
     <div class="modal-body"> 
     <g:if test='${flash.message}'> 
     <div class="message" role="status"> ${flash.message}</div></g:if> 
     <form action='./j_spring_security_check' method='POST' id='loginForm' class='cssform' autocomplete='off'> 
      <div class="form-group"> 
      <%--<input id="email_modal" type="text" placeholder="email" class="form-control"> 
      --%><input type='text' class='form-control' name='j_username' id='username' placeholder="${message(code:'springSecurity.login.username.label') }"/> 
      </div> 
      <div class="form-group"> 
      <%--<input id="password_modal" type="password" placeholder="password" class="form-control"> 
      --%><input type='password' class='form-control' name='j_password' id='password' placeholder="${message(code:'springSecurity.login.password.label') }"/> 
      </div> 
      <p class="text-center"> 
      <button type="submit" id="submit" class="btn btn-primary"><i class="fa fa-sign-in"></i> ${message(code: 'springSecurity.login.button')}</button> 
      </p> 
     </form> 
     <p class="text-center text-muted"><g:link controller="users" action="create"><g:message code="spring.security.ui.login.register" default="New User"/></g:link></p> 
     <p class="text-center text-muted"><g:link controller="register" action="forgotPassword"><g:message code="spring.security.ui.login.forgotPassword" default="Forgot Password"/></g:link></p> 
     </div> 
    </div> 
    </div> 
</div> 
<!-- *** LOGIN MODAL END ***--> 

这里是在弹簧芯登录控制器:

def auth() { 

    def config = SpringSecurityUtils.securityConfig 

    if (springSecurityService.isLoggedIn()) { 
     redirect uri: config.successHandler.defaultTargetUrl 
     return 
    } 

    String view = 'auth' 
    String postUrl = "${request.contextPath}${config.apf.filterProcessesUrl}" 
    render view: view, model: [postUrl: postUrl, 
           rememberMeParameter: config.rememberMe.parameter] 
} 
+0

显示处理登录操作的控制器的当前代码。 –

+0

@Michal_Szulc我编辑了问题 – Sherif

+0

@Sherif你的模式是在“auth.gsp”还是其他一些自定义登录视图? –

回答

0

您可以覆盖LoginController中,并修改你想要的一切行动。考虑到这一点......

如果该参数存在,您可以将操作的参数发送到您的gsp视图以打开该模式。

<g:if test="${openModal}"> 
<script> 
    $(document).ready(function(){ 
     openModal(); 
    }); 
<script> 
</g:if> 

其他的方法是用Ajax做这一切。

您必须重写LoginController并在您的项目中创建它的副本,如上例所示。

之后,您必须更改您期望得到的结果,修改其对Ajax响应的响应。

render status: 401, text: 'Unauthorized' 

而且,当然,您必须更改表单行为以对调用登录控制器进行ajax调用。这是不推荐的,但你可以用g:remoteForm代替那个表单。或者创建你自己的ajax函数。