我想自动登录到 Web 应用程序,该应用程序可以在公司的 Intranet 上访问。
登录的方式是当用户访问应用程序时,他会自动发送其凭据(用户名和密码),例如 (company.com/myapplication/login?user=jhon&pass=123)。
如何使用 HTML 表单实现标准 Spring Security 登录?也许使用隐藏的表单,然后填充 GET 参数?我找不到该场景的任何示例。
我的部分只是在用户发送带有参数的链接之后。
我想自动登录到 Web 应用程序,该应用程序可以在公司的 Intranet 上访问。
登录的方式是当用户访问应用程序时,他会自动发送其凭据(用户名和密码),例如 (company.com/myapplication/login?user=jhon&pass=123)。
如何使用 HTML 表单实现标准 Spring Security 登录?也许使用隐藏的表单,然后填充 GET 参数?我找不到该场景的任何示例。
我的部分只是在用户发送带有参数的链接之后。
您可以通过两种方式(或更多方式)做到这一点。(在我们发表评论后,您似乎需要选择第二种方式,因为您没有用户名和密码)
第一种方式:
使用标准的 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
它的子类。