如何自定义Spring Security Shiro Grails插件登录注销功能?

时间:2017-04-23 05:44:46

标签: grails spring-security

这看起来应该很简单,但是我无法自定义预构建的spring-security-shrio的Login(登录/身份验证)和Logout功能。

我想做一些事情,例如添加登录计数器或登录日志,以便当用户登录时记录他们是谁以及其他信息,如IP地址。

另外,我去了源代码并找到了LoginController,复制了它,但注意到该控制器中没有authenticate方法。

我正在将应用程序从Grails版本2.4.4升级到Grails 3+。生成的代码在哪里?任何指导都将非常感激。

1 个答案:

答案 0 :(得分:0)

不是特定的Shiro,但您可以在视图中添加登录目录,然后添加自己的auth.gsp来处理登录。

请注意,许多参数名称已从Grails 2更改为3,例如j_username到用户名请参阅here

这是我最近从Grails 2到3应用程序转换的引导程序样式:

<html>
<head>
   <meta name='layout' content='main'/>
   <title><g:message code="springSecurity.login.title"/></title>
</head>

<body>
<div id='login' class="maincontentdiv">

      <g:render template="/templates/alerts"/>

      <form action='${postUrl}' method='POST' id='loginForm' class='form-horizontal' autocomplete='off'>

         <fieldset>
            <legend><g:message code="springSecurity.login.header"/></legend>

            <div class="form-group">
               <label class="col-md-4 control-label" for="username">
                  <g:message code="springSecurity.login.username.label" default="Username" />
                  <span class="required-indicator">*</span>
               </label>
               <div class="col-md-4"> 
                  <input type='text' class='form-control' name='username' id='username'/>
               </div>
            </div>

            <div class="form-group">
               <label class="col-md-4 control-label" for="password">
                  <g:message code="springSecurity.login.password.label" default="Password" />
                  <span class="required-indicator">*</span>
               </label>
               <div class="col-md-4"> 
                  <input type='password' class='form-control' name='password' id='password'/>
               </div>
            </div>

            <div class="form-group">
               <label class="col-md-4 control-label" for="submit"></label>
               <div class="col-md-4">
                  <input type='submit' id="submit" class='btn btn-primary' value='${message(code: "springSecurity.login.button")}'/>
               </div>
            </div>
         </fieldset>
      </form>
</div>
<script type='text/javascript'>
   <!--
   (function() {
      document.forms['loginForm'].elements['username'].focus();
   })();
   // -->
</script>
</body>
</html>