Вы можете использовать RequestContextHolder
, и он фактически содержит тот же запрос, хотя Spring Security обычно упаковывает входящий запрос, поэтому вы можете получить другую ссылку в зависимости от того, поместите ли вы RequestContextFilter
до или после цепочки Spring Security.(обратите внимание, что вы можете легко проверить это самостоятельно, сравнив значение, возвращаемое из RequestContextHolder
с запросом в контроллере приложения.)1007 *
package com.mycompany;
public class MyWebAuthenticationDetailsSource implements AuthenticationDetailsSource {
public Object buildDetails(Object context) {
return ((HttpServletRequest)context).getParameter("ip");
}
}
Затем используйте
<bean id="ads" class="com.mycompany.MyWebAuthenticationDetailsSource />
<bean id="formLoginFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<property name="authenticationDetailsSource" ref="ads" />
<property name="authenticationManager" ref="authenticationmanager" />
</bean>
и добавьте его в качестве пользовательского фильтра, как описано в справочном руководстве.В 3.1 пространство имен поддерживает это непосредственно в элементе form-login
.Authentication.getDetails()
вернет значение вашего параметра "ip".
Обратите внимание, что вы, вероятно, не должны использовать 3.0.4, поскольку он имеет известные уязвимости безопасности.
Также, вы можете объяснить, как устанавливается параметр "ip"?