Spring Security的编程使用
我正在将Wicket与Wicket Auth项目一起使用作为我的表示层,因此我已将其与Spring Security集成。这是Wicket为我调用的身份验证方法:
@Override
public boolean authenticate(String username, String password) {
try {
Authentication request = new UsernamePasswordAuthenticationToken(
username, password);
Authentication result = authenticationManager.authenticate(request);
SecurityContextHolder.getContext().setAuthentication(result);
} catch (AuthenticationException e) {
return false;
}
return true;
}
我的Spring Security XML配置的内容(内部)是:
<http path-type="regex">
<form-login login-page="/signin"/>
<logout logout-url="/logout" />
</http>
<global-method-security secured-annotations="enabled" />
<authentication-manager alias="authenticationManager"/>
<authentication-provider user-service-ref="userService">
<password-encoder ref="bcryptpasswordencoder" />
</authentication-provider>
第2.3.6节。会话固定攻击保护的参考文档说:
会话固定攻击是一种潜在的风险,恶意攻击者可以通过访问站点来创建会话,然后诱使其他用户使用同一会话登录(例如,通过向他们发送包含会话标识符作为参数的链接)。Spring Security通过在用户登录时创建一个新会话来自动防止这种情况。如果您不需要此保护,或者它与某些其他要求冲突,则可以使用 上的会话-固定-保护属性来控制行为,该属性有三个选项:
- migrateSession - 创建新会话并将现有会话属性复制到新会话。这是默认设置。
- 无 - 不执行任何操作。原始会话将被保留。
- new会话 - 创建新的“干净”会话,而不复制现有会话数据。
身份验证有效,但是由于我对Spring Security相当陌生,因此我也有一些问题需要回答:
- 通常,对于登录,我会将身份验证信息POST到并让Spring Security执行实际的身份验证代码。我希望获得针对会话固定攻击的保护,当我像执行编程登录一样时,我会得到它吗?如果没有,我该怎么做才能得到它?
j_spring_security_check
- 如何执行编程注销?
- 由于我将使用编程登录和注销,因此如何禁止Spring拦截这些URL?
更新:对于会话固定攻击保护,似乎我需要调用 SessionUtils 类中具有签名的方法。startNewSessionIfRequired(HttpServletRequest request, boolean migrateAttributes, SessionRegistry sessionRegistry)
如何获取需要传入的会话注册表实例?我找不到任何方法来为其创建别名ID,也找不到如何获取其ID或名称的方法。