Как запускается конфигурация Spring Security в xml-файле - PullRequest
1 голос
/ 14 мая 2019

Добрый день,

Я работаю над веб-приложением, которое разработал весенний компонент безопасности старшим разработчиком.

Я пытаюсь понять, как оно работает, поэтому для первого шага яперейдите в Google "Как работает Spring Security", и я думаю, что я немного понимаю, но на самом деле нет.

Давайте возьмем мое приложение в качестве примера:

Вот некоторый код моегоweb.xml:

<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>

До этого момента эти части выглядят аналогично тому, что я гуглю.

Затем я беру свой xml-файл безопасности (часть кода):

<security:http access-denied-page="/403_system.jsp" session-fixation-protection="newSession"
            entry-point-ref="authenticationProcessingFilterEntryPoint"
            access-decision-manager-ref="accessDecisionManager" >
        <security:intercept-url pattern="/images/**" filters="none"/>
        <security:intercept-url pattern="/scripts/**" filters="none"/>
        ... other security in
</security:http>

<bean id="authenticationProcessingFilterEntryPoint" 
        class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    <property name="loginFormUrl" value="/login.html" />
    <property name="forceHttps" value="${url.forceHttps}" />
    <property name="serverSideRedirect" value="${url.serverSideRedirect}" />
</bean>

<bean id="securityContextFilter" class="com.c.i.c.common.security.context.SecurityContextDetailsFilter">
    <security:custom-filter after="SESSION_CONTEXT_INTEGRATION_FILTER"/>
</bean>

<bean id="authenticationProcessingFilter" class="com.cv.ibs.cib.common.security.filter.myWorkAuthenticationProcessFilter">
        <security:custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
   <property name="authenticationManager" ref="authenticationManager" />
   <property name="authenticationFailureUrl" value="/login.html?error=1 "/>
   ...//some other property here
   <property name="exceptionResolver" ref="messageExceptionResolverService"/>
</bean>

И это html-код моей формы в моем login.jsp

<form id="j_security_login" class="login" action="<c:url value='/j_security_login'/>" method="post" autocomplete="off">

Я обнаружил, что SecurityContextDetailsFilter сначала будет запускать метод doFilterHttp(), а затем - метод myWorkAuthenticationProcessFilter doFilterHttp().

Это немного отличается от того, что я читаю из интернета.Я не уверен, почему этот класс 2 вызывает метод doFilterHttp().Это из-за того, что они расширяют класс SpringSecurityFilter и класс AuthenticationProcessingFilter, поэтому они будут вызывать метод doFilterHttp() при входе в систему?

И я считаю, что j_security_login - это ключевое слово для запуска Spring Security.логика.Я прав?Таким образом, это означает, что если у меня есть форма, отправляемая в j_security_login, то она пойдет посмотреть, какой класс реализует класс безопасности Spring и @Override метод doFilterHttp(), тогда он вызовет метод.

Пожалуйстапосоветуйте.

...