如何在grails中自定义spring security插件登录页面

2024-04-30

我尝试在 Spring Security Core 3.1.1 中自定义登录页面,但没有成功。 我在views目录中创建了一个登录目录,并在登录目录中创建了一个auth.gsp,并将我的自定义表单放在那里。 这是代码:

<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>

它需要用户名和密码,但单击登录按钮后,它仍然显示表单。任何解决方案。


这是使用旧形式的旧形式action地址(导致重定向的核心问题)和用户名/密码的旧名称(潜在的问题会更令人沮丧,因为它总是会以正确的值失败,因为如果设置错误,它们将不可用参数名称)。

在 3.x 中覆盖插件文件并不像在 2.x 中那么简单。在 2.x 中,插件是在项目根目录中解压的 zip 文件target目录,您可以使用插件源做有效和/或疯狂的事情。在 3.x 中,插件是编译后的 jar,因此希望我们减少了疯狂的总量,但我们也让做这样的有效事情变得更加困难。

但这是开源软件,确切的 .gsp 文件或足够接近的文件很容易在源代码库中找到,即here https://github.com/grails-plugins/grails-spring-security-core.

auth.gsp很少改变,所以得到它很好master 分支的最新文件 https://github.com/grails-plugins/grails-spring-security-core/blob/master/plugin/grails-app/views/login/auth.gsp,或者您可以查看历史记录(最近的版本是,未来的版本将继续被标记),这样很容易获得旧版本,例如从3.0.4版本开始 https://github.com/grails-plugins/grails-spring-security-core/blob/v3.0.4/grails-app/views/login/auth.gsp.

但这不一定是最终答案,因为该插件是非常可配置的,并且您可以覆盖配置中 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 和用户名/密码参数名称,包括旧的参数名称,但您需要设置配置属性,以便处理登录的 Spring Security 过滤器正在查看正确的 uri 并期望您的参数名称重发。如果您同意默认值,那么这将起作用,您当然可以进行任何您想要的常规 HTML 和 CSS/JS 更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在grails中自定义spring security插件登录页面 的相关文章

随机推荐

  • 测试 powermock 模拟客户端调用的 http 服务器超时

    我需要为 connectTimeout 和 SocketTimeout 异常编写测试用例 我使用 powerMock 创建模拟对象 下面是我的代码 但是我的模拟对象出现空指针异常 任何帮助表示赞赏 package com util impo
  • 如何使用 JSON 和 Perl (HTML::Mason) 通过 AJAX 创建动态网页?

    我对处理 Javascript JSON 和 Peel 的方式感到有些困惑 而且大多数示例都是 PHP 语言 这对我没有帮助 我有一个页面 称为 main html 其中包含来自 MySQL 的数据 并且可以选择按 id 删除行 然后我让
  • 如何使用可滑动选项卡实现 PageTransformer

    在我的示例代码中 我在 MainActivity java 中有三个可滑动选项卡 即 Android IOS 和 WINDOWS 我使用滑动在选项卡之间切换 现在 我必须使用可滑动选项卡实现 PageTransformer 所以这里我需要您
  • Yii:如何用另一个模型数据填充选择输入?

    我正在玩一个小应用程序以学习使用 Yii 我创建了一个小型网络应用程序 其中包含 2 个模型 表 项目和任务 一对多关系 在模型类中正确配置 我现在尝试自定义任务 创建视图 用建议可用项目列表的选择框替换文本输入字段 我打开表单视图并尝试了
  • “分支”到底是什么意思?

    长话短说 据我所知 术语 分支 Git 术语 可能指的是相关但不同的事物 指向提交的非符号引用 指针 此类引用的名称 例如 master 存储库提交 DAG 的子图 由此类引用所指向的提交可到达的所有提交组成 然而 我发现这个术语显然指的是
  • 并发 log4j

    我有自己的日志引擎 它将日志写入带有阻塞队列的单独线程上 为了使用 标准软件 我正在考虑切换到 log4j 我不希望我的高并发软件因日志命令而变慢 这些日志命令在调用命令时将所有内容写入磁盘 log4j 可以用作垃圾箱吗 Log4j 是大多
  • python 解码部分 utf-8 字节数组

    我从不了解 UTF 8 规则的通道获取数据 因此 有时当 UTF 8 使用多个字节来编码一个字符并且我尝试将部分接收到的数据转换为文本时 我在转换过程中遇到错误 根据接口的性质 没有任何结束的流 我无法找出数据何时已满 因此我需要处理部分
  • 如何配置 apache 服务器与 HTTPS 后端服务器通信?

    我将 apache 服务器配置为反向代理 如果我将后端服务器指定为 HTTP 则它可以正常工作 那是 我将虚拟主机 443 配置为 ProxyPass primary store http localhost 9763 store Prox
  • Python 单行代码

    我想要用 Python 编写以下代码的单行解决方案 但是如何实现呢 total 0 for ob in self oblist total sum v amount for v in ob anoutherob 它返回总价值 我想要它是单行
  • 如何从复选框数组中保存布尔状态并在使用 SharedPreferences 加载适配器时加载其状态

    我有一个用于列表视图的 CustomAdapter 我需要使用 SharedPreferences 保存布尔数组中的所有复选框状态 我想将技巧的名称 字符串数组 保存为键和每个技巧的状态 我想到的 SharedPreferences 示例
  • Vagrant 同步文件夹权限

    我已经在 Vagrant 中设置了一个从 Windows 主机到来宾的同步文件夹 最初 文件的权限过于开放 因此我添加了以下安装选项 config vm synced folder my folder home vagrant my fol
  • Qt5 CMake 将所有库包含到可执行文件中

    我正在尝试使用 Qt 5 14 构建一个发布模式下的应用程序 并且 Qt Creator 内部一切正常 但是当我尝试单独运行可执行文件时 我收到如下错误 OS Windows 10 Qt 5 14 Cmake 3 5 我尝试过的 设置 CM
  • “未定义变量”通知

    我对 php 很陌生 所以我确信这是一个简单的过程 我收到这个错误 Notice Undefined variable conn in C Dev Webserver Apache2 2 htdocs EclipsePHP thecock
  • Google Checkout 和 Android Market 之间的 API 级别差异是否有记录?

    序言 这个问题已经过时了 不再有 Google Checkout 和 API Android Market 使用 Google Checkout 进行付费应用程序销售 Google Checkout 有相当广泛的 API Android M
  • 带有 return 语句的 Julia @parallel for 循环

    如何在满足条件时立即返回所有工作人员的函数中编写并行 for 循环 IE 像这样的东西 function test n sync parallel for i in 1 1000 statement if condition return
  • 编辑 CMakeLists.txt 以使用 -fPIC 进行编译

    我正在尝试为名为 libnifalcon 的 NOVINT Falcon 安装驱动程序 我使用 cmake 创建 make 文件 但是当我运行 make 时出现错误 Linking CXX shared library lib libnif
  • R 中添加额外常量的累积乘法

    我是 R 新手 正在努力解决以下累积乘法与添加额外常量的组合 我希望在数据框中实现以下目标 Variable X Variable Y Variable Z X1 Y1 Y1 X1 Z1 X2 Y2 Z1 Y2 X2 Z2 X3 Y3 Z2
  • 使用 Angular 上传文件时 HttpPostedFileBase 为 null

    我将 Angular 与 MVC 结合使用 当我想上传文件时 HttpPostedFileBase一片空白 html
  • gdb 通过指向错误的代码行显示不正确的回溯

    我们可以通过在源代码中包含多个中止调用 用非常简单的示例重现此问题 在下面的示例代码中 我们在不同条件下总共有四个中止调用 但是当我们使用优化标志 O3 进行编译时 我们只能看到一个中止调用的调试信息 因此 在这四个中止调用中发生崩溃时 g
  • 如何在grails中自定义spring security插件登录页面

    我尝试在 Spring Security Core 3 1 1 中自定义登录页面 但没有成功 我在views目录中创建了一个登录目录 并在登录目录中创建了一个auth gsp 并将我的自定义表单放在那里 这是代码