Добрый день,
Я работаю над веб-приложением, которое разработал весенний компонент безопасности старшим разработчиком.
Я пытаюсь понять, как оно работает, поэтому для первого шага яперейдите в 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()
, тогда он вызовет метод.
Пожалуйстапосоветуйте.