Java Spring security复制的RemeberMeProvider
我在客户端使用GWT构建了一个应用程序(将来我会将接口重写为JS),并通过REST请求复制功能。基于Spring框架。 现在我需要实现授权 这是我的security-context.xmlJava Spring security复制的RemeberMeProvider,java,spring,spring-security,Java,Spring,Spring Security,我在客户端使用GWT构建了一个应用程序(将来我会将接口重写为JS),并通过REST请求复制功能。基于Spring框架。 现在我需要实现授权 这是我的security-context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ..........> <security:http auto-config="f
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
..........>
<security:http auto-config="false">
<security:form-login login-page="/login.html"/>
<security:intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<security:intercept-url pattern="/mainGWT.html**" access="ROLE_USER"/>
<security:remember-me services-ref="rememberMeServices" />
</security:http>
<bean id="userDetailsService" class="com.damintsev.servlet.UserDetailsServiceImpl"/>
<bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsService"/>
</bean>
<bean id="rememberMeAuthenticationProvider" class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
<constructor-arg name="key" value="rock"/>
</bean>
<context:component-scan base-package="com.login"/>
<bean id="rememberMeServices" class=
"org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
<property name="userDetailsService" ref="userDetailsService"/>
<property name="key" value="rock"/>
<property name="tokenValiditySeconds" value="5000"/>
<property name="alwaysRemember" value="true"/>
</bean>
<bean id="rememberMeFilter" class=
"org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">
<property name="rememberMeServices" ref="rememberMeServices"/>
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
<bean id="providerManager" class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref bean="daoAuthenticationProvider"/>
<ref bean="org.springframework.security.authentication.RememberMeAuthenticationProvider#0"/>
</list>
</property>
</bean>
<security:authentication-manager alias="authenticationManager">
</security:authentication-manager>
问题的第二部分:我不明白如何将remembermecookie设置为client,所以我编写了这个类。如果我从客户那里收到memory=true,我称之为方法。它是有效的。如果你提供一些例子,请记住我+休息,这将有所帮助
@Component
public class Security {
@Autowired
private RememberMeServices rememberMeServices;
public void remeberMe(HttpServletRequest request, HttpServletResponse response, Authentication authentication1) {
rememberMeServices.setAlwaysRemember(true);
rememberMeServices.loginSuccess(request, response, authentication1);
}
}
您有一个名为
rememberauthenticationprovider
的bean,您还使用了名称空间memberme
元素,该元素也将创建一个,因此是重复的。您还声明了一个过滤器,除非您实际将其插入到过滤器链中,否则不会使用该过滤器
要么删除namespace元素并完全自己声明所有bean,要么坚持使用namespace并让它完成工作。如果您想定制RememberMeServices
,您可以保留它和services ref
,但您的问题不清楚为什么需要定制
如果客户机发送“记住我”cookie,则服务器将处理该cookie,而不考虑客户机的类型。如何设置首先取决于登录机制。表单登录处理将自动调用
RememberMeServices
,并在适当时设置cookie。谢谢!我删除了名称空间,spring没有创建另一个提供程序。但是我不明白在没有任何登录表单的情况下如何将cookie设置为cient。我的意思是客户端向我发送一个类似JSON的({login:“…”,pswd:“…”,remeeber:true})。我想对它进行身份验证并发送cookie。如果您还没有对客户端进行身份验证,我建议您在尝试设置“记住我”之前先进行验证。如果要发送JSON消息以登录,则必须使用自定义身份验证过滤器来处理此问题。但是,当您可以发布请求并让标准过滤器处理它时,为什么要发送JSON呢?实际上不需要有一个表单。或者使用基本身份验证。设置还将取决于您是否希望应用程序具有会话。
@Component
public class Security {
@Autowired
private RememberMeServices rememberMeServices;
public void remeberMe(HttpServletRequest request, HttpServletResponse response, Authentication authentication1) {
rememberMeServices.setAlwaysRemember(true);
rememberMeServices.loginSuccess(request, response, authentication1);
}
}