2

我想自动登录到 Web 应用程序,该应用程序可以在公司的 Intranet 上访问。

登录的方式是当用户访问应用程序时,他会自动发送其凭据(用户名和密码),例如 (company.com/myapplication/login?user=jhon&pass=123)。

如何使用 HTML 表单实现标准 Spring Security 登录?也许使用隐藏的表单,然后填充 GET 参数?我找不到该场景的任何示例。

我的部分只是在用户发送带有参数的链接之后。

4

1 回答 1

2

您可以通过两种方式(或更多方式)做到这一点。(在我们发表评论后,您似乎需要选择第二种方式,因为您没有用户名和密码)

第一种方式:

使用标准的 spring 表单登录,然后修改您的应用程序,以便像普通的 Web 表单登录一样发送登录请求。

假设您已经配置了login-processing-url="/login/j_spring_security_check"

<security:form-login
     login-processing-url="/login/j_spring_security_check"
     login-page="/login"
     authentication-failure-url="/login?login_error=t" />

然后发送一个

https://yourApplication/login/j_spring_security_check带有两个 POST 参数的HTTP POST

 j_username=<login>
 j_password=<password>

第二种方式

编写您自己的身份验证处理过滤器。那是一个扩展的类,AbstractAuthenticationProcessingFilter它负责

  • 从请求中获取用户用于验证的内容(通常是用户名和密码),
  • 从中形成一些用户身份验证令牌对象(例如一个UsernamePasswordAuthenticationToken
  • AuthenticationManager.authenticate(Authentication authentication)并使用此身份验证令牌调用

要注册您的过滤器,您只需要将它们添加到 spring 安全过滤器链中:

<security:custom-filter ref="yourFilter" after="FORM_LOGIN_FILTER"/>

我建议对UsernamePasswordAuthenticationFitler(并记住是 extends AbstractAuthenticationProcessingFilter)有一个看法 - 这将最好地解释它。

如果您没有用户名和密码,那么您需要创建自己的令牌(扩展Authentication),然后您必须实现自己的令牌(AuthenticationProvider并在 AuthenticationManager 中注册)。AAuthenticationProvider负责 - 使用(特殊类型的)身份验证令牌并 - 验证身份验证令牌中的内容是否有效 - 使用和权限创建 OTHERAuthentication对象UserDetails- 或者,如果身份验证令牌无效,则抛出AuthenticationException

例如,看看AbstractUserDetailsAuthenticationProvider它的子类。

于 2013-11-10T18:50:21.880 回答