gpt4 book ai didi

java - 上下文初始化失败。 Spring错误NoSuchMethodException

转载 作者:行者123 更新时间:2023-12-01 08:48:29 25 4
gpt4 key购买 nike

当我尝试在运行时启动 Hybris 平台时,出现此错误:

WARN  [localhost-startStop-1] [TenantIgnoreXmlWebApplicationContext] Exception encountered during context initialization - cancelling refresh at
tempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'checkoutController': Injection of resource depend
encies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'autoLoginStrategy' de
fined in ServletContext resource [/WEB-INF/config/common-spring-security-config.xml]: Cannot resolve reference to bean 'rememberMeServices' whil
e setting bean property 'rememberMeServices'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean w
ith name 'defaultRememberMeServices' defined in ServletContext resource [/WEB-INF/config/common-spring-security-config.xml]: Instantiation of be
an failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.sap.hybris.fs.storefront.securit
y.AcceleratorRememberMeServices]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.sap.hybris.fs.storefron
t.security.AcceleratorRememberMeServices.<init>()

AcceleratorRememberMeServices 类是这样的:

 /*
* [y] hybris Platform
*
* Copyright (c) 2000-2015 hybris AG
* All rights reserved.
*
* This software is the confidential and proprietary information of hybris
* ("Confidential Information"). You shall not disclose such Confidential
* Information and shall use it only in accordance with the terms of the
* license agreement you entered into with hybris.
*
*
*/
package com.sap.hybris.fs.storefront.security;

import de.hybris.platform.acceleratorservices.urlencoder.UrlEncoderService;
import de.hybris.platform.acceleratorstorefrontcommons.constants.WebConstants;
import de.hybris.platform.commercefacades.customer.CustomerFacade;
import de.hybris.platform.commercefacades.storesession.StoreSessionFacade;
import de.hybris.platform.commerceservices.security.SecureTokenService;
import de.hybris.platform.commerceservices.strategies.CheckoutCustomerStrategy;
import de.hybris.platform.servicelayer.i18n.CommonI18NService;
import de.hybris.platform.servicelayer.user.UserService;
import com.sap.hybris.fs.storefront.web.wrappers.RemoveEncodingHttpServletRequestWrapper;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.security.authentication.RememberMeAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices;


public class AcceleratorRememberMeServices extends TokenBasedRememberMeServices
{
public AcceleratorRememberMeServices(String key, UserDetailsService userDetailsService) {
super(key, userDetailsService);
// YTODO Auto-generated constructor stub
}

private UserService userService;
private CustomerFacade customerFacade;
private CheckoutCustomerStrategy checkoutCustomerStrategy;
private StoreSessionFacade storeSessionFacade;
private CommonI18NService commonI18NService;
private UrlEncoderService urlEncoderService;
private SecureTokenService secureTokenService;

@Override
protected void setCookie(final String[] tokens, final int maxAge, final HttpServletRequest request,
final HttpServletResponse response)
{
if (!getCheckoutCustomerStrategy().isAnonymousCheckout())
{
super.setCookie(tokens, maxAge, new RemoveEncodingHttpServletRequestWrapper(request, getUrlEncodingPattern(request)),
response);
}
}

@Override
public void logout(final HttpServletRequest request, final HttpServletResponse response, final Authentication authentication)
{
super.logout(new RemoveEncodingHttpServletRequestWrapper(request, getUrlEncodingPattern(request)), response, authentication);
}

@Override
protected Authentication createSuccessfulAuthentication(final HttpServletRequest request, final UserDetails user)
{
getUserService().setCurrentUser(getUserService().getUserForUID(user.getUsername()));

if (StringUtils.isNotEmpty(getUrlEncoderService().getUrlEncodingPattern()))
{
getCustomerFacade().rememberMeLoginSuccessWithUrlEncoding(getUrlEncoderService().isLanguageEncodingEnabled(),
getUrlEncoderService().isCurrencyEncodingEnabled());
}
else
{
getCustomerFacade().loginSuccess();
}
final RememberMeAuthenticationToken auth = new RememberMeAuthenticationToken(getKey(), user, user.getAuthorities());
auth.setDetails(getAuthenticationDetailsSource().buildDetails(request));
return auth;
}

@Override
protected String retrievePassword(final Authentication authentication)
{
return getUserService().getUserForUID(authentication.getPrincipal().toString()).getEncodedPassword();
}

protected String getUrlEncodingPattern(final HttpServletRequest request)
{
final String encodingAttributes = (String) request.getAttribute(WebConstants.URL_ENCODING_ATTRIBUTES);
return StringUtils.defaultString(encodingAttributes);
}

protected UserService getUserService()
{
return userService;
}

@Required
public void setUserService(final UserService userService)
{
this.userService = userService;
}

protected CustomerFacade getCustomerFacade()
{
return customerFacade;
}

@Required
public void setCustomerFacade(final CustomerFacade customerFacade)
{
this.customerFacade = customerFacade;
}

protected CheckoutCustomerStrategy getCheckoutCustomerStrategy()
{
return checkoutCustomerStrategy;
}

@Required
public void setCheckoutCustomerStrategy(final CheckoutCustomerStrategy checkoutCustomerStrategy)
{
this.checkoutCustomerStrategy = checkoutCustomerStrategy;
}

protected UrlEncoderService getUrlEncoderService()
{
return urlEncoderService;
}

@Required
public void setUrlEncoderService(final UrlEncoderService urlEncoderService)
{
this.urlEncoderService = urlEncoderService;
}


protected StoreSessionFacade getStoreSessionFacade()
{
return storeSessionFacade;
}

@Required
public void setStoreSessionFacade(final StoreSessionFacade storeSessionFacade)
{
this.storeSessionFacade = storeSessionFacade;
}

protected CommonI18NService getCommonI18NService()
{
return commonI18NService;
}

@Required
public void setCommonI18NService(final CommonI18NService commonI18NService)
{
this.commonI18NService = commonI18NService;
}

protected SecureTokenService getSecureTokenService()
{
return secureTokenService;
}

@Required
public void setSecureTokenService(final SecureTokenService secureTokenService)
{
this.secureTokenService = secureTokenService;
}
}

bean 的声明方式如下:

<alias name="defaultRememberMeServices" alias="rememberMeServices"/>
<bean id="defaultRememberMeServices" class="com.sap.hybris.fs.storefront.security.AcceleratorRememberMeServices" >
<property name="userDetailsService" ref="originalUidUserDetailsService" />
<property name="key" value="fsstorefront" />
<property name="cookieName" value="fsstorefrontRememberMe" />
<property name="alwaysRemember" value="true" />
<property name="userService" ref="userService"/>
<property name="useSecureCookie" value="false"/>
<property name="customerFacade" ref="customerFacade"/>
<property name="checkoutCustomerStrategy" ref="checkoutCustomerStrategy"/>
<property name="urlEncoderService" ref="urlEncoderService"/>
<property name="storeSessionFacade" ref="storeSessionFacade"/>
<property name="commonI18NService" ref="commonI18NService"/>
<property name="secureTokenService" ref="secureTokenService"/>
</bean>

构造方法有问题吗?还是Spring配置的问题?感谢您对任何人的宝贵帮助。

最佳答案

它正在寻找默认构造函数,因此 <init>() 。您需要创建一个默认构造函数,或者在声明 bean 时使用构造函数参数。

在本例中,由于您要扩展现有的 TokenBasedRememberMeServices类中,您需要使用相关的构造函数参数(key、userDefaultsService)声明 bean,而不是将它们作为属性注入(inject)。您的声明应如下所示:

<bean id="defaultRememberMeServices" class="com.sap.hybris.fs.storefront.security.AcceleratorRememberMeServices" >
<!-- constructor arguments -->
<constructor-arg index="0" value="fsstorefront"/>
<constructor-arg index="1" ref="originalUidUserDetailsService" />

<!-- rest of the properties -->
<property name="cookieName" value="fsstorefrontRememberMe" />
<property name="alwaysRemember" value="true" />
<property name="userService" ref="userService"/>
<property name="useSecureCookie" value="false"/>
<property name="customerFacade" ref="customerFacade"/>
<property name="checkoutCustomerStrategy" ref="checkoutCustomerStrategy"/>
<property name="urlEncoderService" ref="urlEncoderService"/>
<property name="storeSessionFacade" ref="storeSessionFacade"/>
<property name="commonI18NService" ref="commonI18NService"/>
<property name="secureTokenService" ref="secureTokenService"/>
</bean>

查看有关构造函数参数注入(inject)和 Spring 依赖注入(inject)的更多信息 here

关于java - 上下文初始化失败。 Spring错误NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42536369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com