Я пытаюсь создать свой собственный UserDetailsService с помощью Spring Framework.
Я создал следующий простой класс, но получаю сообщение об ошибке: Cannot convert value of type [com.mycompany.project.MyDetailsService] to required type org.springframework.security.core.userdetails.UserDetailsService]
Полный класс:
package com.mycompany.myproject;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
public class MyDetailsService implements UserDetailsService{
private static final Log log = LogFactory.getLog(MyDetailsService.class);
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException, DataAccessException {
return null; //It'll do something here later
}
}
Я могу включить стек заполненияпроследить, если это полезно.Он просто длинный и не умещается в поле, поэтому здесь полный текст сообщения об ошибке перед трассировкой стека.
28542 [main] ERROR StackTrace - Очистка трассировки стека: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем org.springframework.security.authentication.ProviderManager # 0 ': невозможно создать внутренний бин (внутренний бин) типа [org.springframework.security.config.authentication.AuthenticationManagerFactoryBee]при установке свойства bean 'parent';вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем '(внутренний компонент) # 15': FactoryBean вызвал исключение при создании объекта;вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания компонента с именем 'org.springframework.security.authenticationManager': невозможно разрешить ссылку на компонент 'casAuthenticationProvider' при установке свойства компонента 'поставщики' с ключом [0];вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'casAuthenticationProvider', определенным в файле [/usr/share/jetty/resources/OWFsecurityContext.xml]: инициализация компонента не выполнена;вложенным исключением является org.springframework.beans.ConversionNotSupportedException: не удалось преобразовать значение свойства типа 'com.mycompany.myproject.MyDetailsService' в требуемый тип 'org.springframework.security.core.userdetails.UserDetailsService' user 'Вложенное исключение - java.lang.IllegalStateException: невозможно преобразовать значение типа [com.mycompany.project.MyDetailsService] в новый тип [org.springframework.security.core.userdetails.UserDetailsService] для свойства 'userDetailsSeritor':найдена стратегия
Контекст безопасности:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:sec="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<sec:http entry-point-ref="casProcessingFilterEntryPoint">
...
</sec:http>
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider ref="casAuthenticationProvider" />
</sec:authentication-manager>
<bean id="casProcessingFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureHandler">
<bean
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<property name="defaultFailureUrl" value="/cas_failed.jsp" />
</bean>
</property>
<property name="proxyGrantingTicketStorage" ref="proxyGrantingTicketStorage" />
<property name="proxyReceptorUrl" value="/secure/receptor" />
</bean>
<bean id="casProcessingFilterEntryPoint"
class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
<property name="loginUrl" value="..." />
<property name="serviceProperties" ref="serviceProperties" />
</bean>
<bean id="casAuthenticationProvider"
class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
<property name="userDetailsService" ref="userService" />
<property name="serviceProperties" ref="serviceProperties" />
<property name="ticketValidator" ref="ticketValidator" />
<property name="key" value="an_id_for_this_auth_provider_only" />
</bean>
<bean id="ticketValidator"
class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
<constructor-arg index="0" value="..." />
<property name="proxyGrantingTicketStorage" ref="proxyGrantingTicketStorage" />
<property name="proxyCallbackUrl"
value="..." />
</bean>
<bean id="proxyGrantingTicketStorage"
class="org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl" />
<bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
<property name="service"
value="..." />
<property name="sendRenew" value="false" />
</bean>
<bean id="userService" class="com.mycompany.myproject.MyDetailsService" >
</bean>
...
</beans>