AuthenticationManager Вызывается много раз во время входа Spring Security - PullRequest
0 голосов
/ 15 марта 2019

Последние несколько дней я пытался найти решение для своей проблемы, что заставило меня опубликовать этот запрос.
Может обнаружиться, что в моем приложении Spring во время входа в систему вызывается вызов аутентификации для AuthenticationProvider.почти 7 раз для входа в систему.

В приложении я использовал понятия BasicAuthenticationEntryPoint, AuthenticationManager, AuthenticationProvider.

Ниже приведены подробности конфигурации, в application_context_security

    <http use-expressions="true" create-session="stateless"
            authentication-manager-ref="authManager">
            <intercept-url pattern="/services/**" access="authenticated" />
            <http-basic entry-point-ref="testAuthenticationEntryPoint"  />
        </http>
        <beans:bean id="testAuthenticationEntryPoint"
            class="com.test.TestAuthenticationEntryPoint" />

        <beans:bean id="authenticationProvider"
            class="com.test.TestAuthenticationProvider" />
        <beans:bean id="authManager"
            class="com.Test.TestAuthenticationManager" />
        <debug></debug>

TestAuthenticationEntryPoint.java

    @Component("testAuthenticationEntryPoint")
    public class TestAuthenticationEntryPoint extends BasicAuthenticationEntryPoint 
    {
     @Override
        public void commence(final HttpServletRequest request, final HttpServletResponse response,
                final AuthenticationException authException) throws IOException, ServletException
        {
           response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            response.addHeader("WWW-Authenticate", "FormBased");
    }

    @Override
        public void afterPropertiesSet() throws Exception
        {
            setRealmName("REST_REALM");
            super.afterPropertiesSet();
        }
    }

SecurityConfig.java

    @Configuration
    @ImportResource({ "classpath:applicationContext-security.xml" })
    @ComponentScan("com.test")
    public class SpringSecurityConfig
    {
        public SpringSecurityConfig()
        {
            super();
            LOGGER.info("################   SpringSecurityConfig calling from CONSTRUCTOR ################");
        }

WebConfig.java

    @Configuration
    @ComponentScan("com.test")
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter
    {
        public WebConfig()
        {
            super();
            LOGGER.info("################   WebConfig calling from CONSTRUCTOR ################");
        }
    }

TestAuthenticationManager.java

public class TestAuthenticationManager implements AuthenticationManager
    {
    @Autowired()
    TestAuthenticationProvider testAuthenticationProvider;
    @Override
    public Authentication authenticate(Authentication auth) throws AuthenticationException
    {
        LOGGER.info("################   RestAuthenticationManager authenticate()  ################");
        return testAuthenticationProvider.authenticate(auth);
    }

AuthenticationProvider

    public class TestAuthenticationProvider implements AuthenticationProvider
    {

        @Autowired
        AuthenticationService authenticationService;

        @Override
        public Authentication authenticate(Authentication auth) throws AuthenticationException
        {
        LOGGER.info("################   TestAuthenticationProvider authenticate()  ################");
        TestAuthentication authentication = authenticationService.authenticate(auth.getName(), auth.getCredentials());
        }   

    @Override
        public boolean supports(Class<?> arg0)
        {
            return arg0.equals(TestAuthentication.class);
        }
    }

Служба AuthenticationService помечена как @Service, и здесь выполняется проверка имени пользователя и pwd.

TestAuthentication - это класс POJO, который расширяет UsernamePasswordAuthenticationToken, который содержит идентификатор пользователя, имя пользователя,authToken.

Пока PerfПри формировании имени входа журналы, упомянутые в TestAuthenticationManager и TestAuthenticationProvider, неоднократно появляются почти 7 раз. Как мы можем избежать этой множественной аутентификации?

Пробовал разными способами, одним из которых было использование тега в файле xml и предоставление класса поставщика аутентификации внутри него, а также использование аннотации @Component для TestAuthenticationProvider, прокомментировал класс AuthenticationManager. Но в этом случаеэлемент управления не переходит в класс AuthenticationProvider.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...