drno-reg
@drno-reg
см не кратко

Почему после logout wabapp пускает на защищенную часть?

Здравствуйте.

Для авторизации использовал всегда "свой велосипед".
Сегодня решил попробовать приобщиться к любителям Sptring Security.
В качестве примера решено было попробовать пример из статьи https://habrahabr.ru/post/226791/.

исходник здесь
https://github.com/elennaro/sshwa/tree/0.2-SNAPSHOT

В результате WebApp взлетел, НО обнаружился серьезный недостаток.
Обращение по localhost:8000/ перенаправляет меня на форму Login
Выполняю login - захожу на защищенную часть
localhost:8000/confidential
Далее на защищенной части выполняю logout
меня выкидывает на страницу авторизации.
Пока все нормально.
НО если я снова обращусь БЕЗ авторизации на
localhost:8000/confidential
security меня свободно пускает и пишет, что я зашел под учетной записью из-под которой я вышел ранее.

В чем проблема и как ее решить?
  • Вопрос задан
  • 335 просмотров
Решения вопроса 2
DarkRaven
@DarkRaven
разработка программного обеспечения
Давайте так. https://github.com/elennaro/sshwa/tree/0.2-SNAPSHOT - приложение отсюда работает?
Если работает, то что-то у вас не так. Если нет - то нужно разбираться с конфигурированием, что-то где-то не сработало.

Сам использую xml-конфигурацию - с закрытием областей проблем не было ни разу.
Но хочу отметить, у меня были проблемы с выходом, не мог разобраться, почему не работал.

В результате, у меня в 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>/j_spring_security_logout</url-pattern>
    </filter-mapping>

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


Ну и сам конфиг безопасности:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://www.springframework.org/schema/security"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/security 
	http://www.springframework.org/schema/security/spring-security-4.0.xsd">

    <beans:bean id="tokenPersistRepo"
                class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl">
        <beans:property name="dataSource" ref="dataSource"/>
    </beans:bean>


    <beans:bean id="nonAjaxRequestMatcher" class="org.whatever.NonAjaxRequestMatcher"/>

    <beans:bean id="loginUrlAuthenticationEntryPoint"
                class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
        <beans:constructor-arg value="/login"/>
    </beans:bean>

    <beans:bean id="ajaxAuthenticationEntryPoint"
                class="org.springframework.security.web.authentication.HttpStatusEntryPoint">
        <beans:constructor-arg name="httpStatus"
                               value="#{T(org.springframework.http.HttpStatus).UNAUTHORIZED}"/>
    </beans:bean>

    <beans:bean id="authenticationRequestCache"
                class="org.springframework.security.web.savedrequest.HttpSessionRequestCache">
        <beans:property name="requestMatcher" ref="nonAjaxRequestMatcher"/>
    </beans:bean>

    <beans:bean id="authenticationEntryPoint"
                class="org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint">
        <beans:constructor-arg>
            <beans:map>
                <beans:entry key-ref="nonAjaxRequestMatcher" value-ref="loginUrlAuthenticationEntryPoint"/>
            </beans:map>
        </beans:constructor-arg>
        <beans:property name="defaultEntryPoint" ref="ajaxAuthenticationEntryPoint"/>
    </beans:bean>

    <http entry-point-ref="authenticationEntryPoint" use-expressions="true">
        <request-cache ref="authenticationRequestCache"/>

        <headers>
            <frame-options disabled="true"/>
        </headers>

        <intercept-url pattern="/backend/roles/**" access="hasAnyRole('ROLE_ADMINISTRATOR')"/>
        <intercept-url pattern="/backend/**" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS')"/>
        <intercept-url pattern="/registries/**" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS', 'ROLE_REGISTRY')"/>
        <intercept-url pattern="/registries" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS', 'ROLE_REGISTRY')"/>
        <intercept-url pattern="/login/**" access="permitAll"/>
        <intercept-url pattern="/logout/**" access="permitAll"/>
        <intercept-url pattern="/resources/**" access="permitAll"/>
        <intercept-url pattern="/bundles/**" access="permitAll"/>
        <intercept-url pattern="/jawr/**" access="permitAll"/>
        <intercept-url pattern="/error/**" access="permitAll"/>

        <access-denied-handler error-page="/403"/>

        <intercept-url pattern="/**" access="isAuthenticated()"/>

        <form-login login-page="/login" default-target-url="/"
                    authentication-failure-url="/login?error" username-parameter="username"
                    password-parameter="password"/>

        <logout logout-success-url="/" logout-url="/j_spring_security_logout" delete-cookies="JSESSIONID,remember-me"/>

        <remember-me
                key="${app.remember-me-key}"
                remember-me-parameter="remember-me"
                remember-me-cookie="remember-me"
                token-validity-seconds="86400"
                token-repository-ref="tokenPersistRepo"/>

        <csrf/>
    </http>

    <authentication-manager alias="authenticationManager">
        <authentication-provider user-service-ref="usersManager">
            <password-encoder hash="bcrypt"/>
        </authentication-provider>
    </authentication-manager>

</beans:beans>


Есть подозрение, что он избыточен, но сейчас проверять нет цели, желания и времени, т.к. проекты с Java не пересекаются, к сожалению.
Ответ написан
drno-reg
@drno-reg Автор вопроса
см не кратко
пример https://www.mkyong.com/spring-security/spring-secu...

оказался самым рабочим, взлетел сразу и в нем отсутствовали проблемы, которые были и в https://habrahabr.ru/post/226791/
и devcolibri.com/3810
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
28 мар. 2024, в 18:16
1000 руб./за проект
28 мар. 2024, в 18:15
90000 руб./за проект
28 мар. 2024, в 18:05
5000 руб./за проект