Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring security复制的RemeberMeProvider_Java_Spring_Spring Security - Fatal编程技术网

Java Spring security复制的RemeberMeProvider

Java 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

我在客户端使用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="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);
    }
}