同时开发一个应用程序很有用的,能够迅速登录为不同的用户使用,与不同的角色,看看如何应用程序提供本身。

打字用户名和进入密码是没有乐趣,并浪费时间。什么我想要做的是:

  • 增加一个页面有一系列可用的用户名;
  • 点击了一个用户名将产生一个事件春季安全允许它认识到作为用户认证,而不进入密码;
  • 点击链接后我是认证为指定的用户。

N.B。:密码是散列和提交的纯文本使用的形式,所以编码的密码在的联系不是一个选项。

显然 此功能只会在开发时间。

我如何可以实现这一目标?

有帮助吗?

解决方案

我已经做到了这样一种网页应用程序:

我有一个结构的参数 context.xml 服务器(当然只有在发展服务器)。此参数包含一个昏迷分开列的用户名和密码。

登录网页(jsp(x))简单地添加一个额外的形式和提交按钮,对于每个用户名、口令的项目形式的上下文参数。因此,如果一个用户点击那个按钮的正常登录进程的预先定义登录的数据是触发时。

服务器context.xml

...
<Context>
    ...
    <Parameter name="quickLogin"
               value="admin:passwd,user:otherPasswd"
               override="false" />
</Context>

登录。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>
...

其他提示

使用InMemoryDaoImpl发展模式。这是非常容易建立用户和密码存储在存储器:

<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
  <property name="userMap">
    <value>
      admin=admin,ROLE_ADMIN,ROLE_USER
      user1=user1,ROLE_USER
      user2=user2,ROLE_USER
    </value>
  </property>
</bean>

在发展模式注入这个给你的认证提供者。在生产替换的适当DB或LDAP执行情况。

我的理解你会喜欢有SpringSecurity验证你的自动如果一些特定的网址是要求(和你会有一个链接到这个网址在你的小组/页)。

关于如何编写定制的筛选:

public class YourSpecialDevelopmentTimeFilter 
extends AuthenticationProcessingFilter 
implements SyncSecurityFilter
....

这将复盖:

protected boolean requiresAuthentication(
     HttpServletRequest request, HttpServletResponse response)

和返回的真正根据某些参数 request?

当然,另一个担忧是没有这种功能在生产环境。这始终是一个危险的事情有不同的码基地 devprod.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top