Grails 3 Spring Security覆盖登录表单

时间:2016-02-06 01:49:12

标签: spring grails spring-security

我从spring文档中发现了一些可以覆盖登录控制器和表单的内容。我只想在保留默认控制器的同时覆盖登录表单本身。我发现了这个:

  

在grails安全性插件中,登录gsp页面位于grails-app / views / login / auth.gsp,控制器位于grails-app / controllers / grails / plugin / springsecurity / LoginController.groovy。我不认为只需创建自己的实现就可以覆盖控制器,但是您应该能够通过在您的应用中将自己的auth.gsp放在上面显示的相同路径中来覆盖gsp页面。

https://plus.google.com/117486613280979732172/posts/cvqcfAQVWE6

然而,这只是无法覆盖页面,并且默认页面不断出现。有没有人用Grails 3和Spring安全库做到这一点?

编辑: 我通过使用这些库并设置自己的bean来使用OAuth2。我认为另一种方式可能是使用grails插件来保证弹簧安全。有没有办法使用这些库覆盖登录页面?

compile "org.springframework.boot:spring-boot-starter-security"
compile "org.springframework.security.oauth:spring-security-oauth2:2.0.8.RELEASE"

2 个答案:

答案 0 :(得分:2)

好的,既然我没有使用grails spring安全插件,我需要在此处的指导下更换登录页面: http://docs.spring.io/spring-security/site/docs/3.2.x/guides/form.html

基本上,我必须创建一个LoginController

class LoginController {
def auth() {

}

def error() {

}

然后,我将视图放在相应的路径中:views / login / auth,views / login / error

以下是auth.gsp示例

<html>
<body>
<h1 id="banner">Login to Security Demo</h1>
<form name="f" action="/login/auth"
      method="POST">
    <table>
        <tr>
            <td>Username:</td>
            <td><input type='text' name='username' /></td>
        </tr>
        <tr>
            <td>Password:</td>
            <td><input type='password' name='password'></td>
        </tr>
        <tr>
            <td colspan="2">&nbsp;</td>
        </tr>
        <tr>
            <td colspan='2'><input name="submit" type="submit">&nbsp;<input name="reset" type="reset"></td>
        </tr>
    </table>
    <input type="hidden"
           name="${_csrf.parameterName}"
           value="${_csrf.token}"/>
</form>
</body>
</html>

然后在配置HttpSecurity:

    @Override
public void configure(HttpSecurity http) {
    http
        .authorizeRequests()
        .anyRequest().authenticated()
        .and()
        .formLogin()
            .loginPage('/login/auth')
            .defaultSuccessUrl("/")
            .failureUrl("/login/error")
            .usernameParameter("username").passwordParameter("password")
            .permitAll()
}

使用grails安全插件会很好,但我无法弄清楚如何使用它来运行OAuth2。如果有人对此有指导,我会改变我接受的答案。

答案 1 :(得分:1)

这是一种更为简单和系统化的方法。没有所有这些手动复制粘贴工作。

  1. 安装 spring-security-core plugin 后,使用grails控制台上的grails s2-quickstart命令配置基本用户和角色域(您可以使用s2-quickstart配置其他方面); < / LI>
  2. 安装 spring-security-ui plugin 并使用grails s2ui-override auth命令覆盖 login / auth 表单(这将创建登录表单,以便您覆盖它)
  3. 使用grails s2ui-override layout覆盖表单的布局(这将创建springSecurityUI.gsp布局,以便您覆盖它)
  4. 希望它有所帮助。