开发模式的Spring安全预认证

Rob*_*anu 5 java spring spring-security

在开发应用程序时,能够以不同用户、不同角色的身份快速登录以查看应用程序如何呈现自己是非常有用的。

输入用户名和输入密码并不好玩,而且是浪费时间。我想做的是:

  • 添加带有可用用户名列表的页面/面板;
  • 单击用户名将为 Spring security 生成一个事件,允许它在不输入密码的情况下将用户识别为已通过身份验证;
  • 单击链接后,我被认证为指定用户。

注意:密码被散列并使用表单以纯文本形式提交,因此在链接中编码密码不是一种选择。

显然,此功能只会在开发时出现。

我怎样才能做到这一点?

Ral*_*lph 2

我已经为网络应用程序这样做了:

我在服务器中有一个配置参数context.xml(当然仅在开发服务器中)。此参数包含逗号分隔的用户名和密码列表。

登录页面(jsp(x))只需为上下文参数中的每个用户名、密码项添加一个额外的表单和提交按钮。因此,如果用户单击该按钮,则会触发使用预定义登录数据的正常登录过程。

服务器上下文.xml

...
<Context>
    ...
    <Parameter name="quickLogin"
               value="admin:passwd,user:otherPasswd"
               override="false" />
</Context>
Run Code Online (Sandbox Code Playgroud)

登录.jspx

...
<!-- Login for debugging purposes -->     
<c:forTokens items="${initParam.quickLogin}" delims="," var="loginPassword">
    <c:set var="login" value="${fn:split(loginPassword, ':')[0]}" />
    <c:set var="password" value="${fn:split(loginPassword, ':')[1]}" />

    <form name="debugLogin" action="${form_url}" method="POST" >
        <crsf:hiddenCrsfNonce/>
        <input type="hidden" name='j_username' value="${fn:escapeXml(login)}" />
        <input type="hidden" name='j_password' value="${fn:escapeXml(password)}" />
        <input type="submit" value="${fn:escapeXml(login)} login" />
    </form>
</c:forTokens>
...
Run Code Online (Sandbox Code Playgroud)