@Autowire не работает в Spring Security Custom Authentication Provider

У нас есть приложение Spring MVC. Мы пытаемся интегрировать в него безопасность Spring.

Мы написали нашего настраиваемого провайдера аутентификации, который будет выполнять работу по аутентификации.

Ниже приведен код моего настраиваемого провайдера аутентификации.

    public class CustomAuthenticationProvider extends DaoAuthenticationProvider {

    @Autowired
    private AuthenticationService authenticationService;

    @Override
    public Authentication authenticate(Authentication authentication) {

        CustomAuthenticationToken auth = (CustomAuthenticationToken) authentication;

        String username = String.valueOf(auth.getPrincipal());
        String password = String.valueOf(auth.getCredentials());

        try {

            Users user = new User();
            user.setUsername(username);
            user.setPassword(PasswordUtil.encrypt(password));

            user = authenticationService.validateLogin(user);

            return auth;
        } catch (Exception e) {
            throw new BadCredentialsException("Username/Password does not match for " + username);
        }
    }

    @Override
    public boolean supports(Class<? extends Object> authentication) {
        return (CustomAuthenticationToken.class.isAssignableFrom(authentication));

    }
}

Здесь я получаю NullpointerException в следующей строке

user = authenticationService.validateLogin(user);

AuthenticationService не подключается автоматически в настраиваемом провайдере аутентификации. В то время как тот же сервис authenticationService автоматически подключается таким же образом в моем контроллере MVC.

Это потому, что провайдер аутентификации является компонентом безопасности Spring?

Ниже мой web.xml

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/myApp-security.xml
    </param-value>
</context-param>

<servlet>
    <servlet-name>myApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/myApp-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>myApp</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

Edit 1: -

Я добавил следующие строки в свой файл конфигурации безопасности Spring.

<beans:bean id="customAuthenticationProvider" class="com.myApp.security.provider.CustomAuthenticationProvider">
    <beans:property name="userDetailsService" ref="userDetailsService"/>   
</beans:bean>

Пожалуйста, помогите, как автоматически подключить мои классы обслуживания в компонентах безопасности Spring?

11
задан ashishjmeshram 11 August 2011 в 10:04
поделиться

1 ответ

при использовании Spring MVC затем, необходимо добавить и spring-security.xml и dispatcher-servlet.xml в contextConfigLocation.

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring-security.xml
            /WEB-INF/dispatcher-servlet.xml
        </param-value>
    </context-param>
0
ответ дан 3 December 2019 в 09:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: