Кнопка возврата в Spring Security - PullRequest
4 голосов
/ 15 апреля 2011

Есть ли у пружинной безопасности способ предотвратить последнюю точку ниже?Я использую 3.0.5

-пользователь заходит на мой сайт -пользователь заходит на любую страницу сайта и нажимает кнопку «Выйти» - ссылка «Выход из системы» делает недействительным сеанс пользователя и отправляет их на страницу входа в мой сайт -втот же браузер, пользователь переходит на новый веб-сайт (скажем, cnn.com) -пользователь нажимает кнопку «Назад» и попадает на мою страницу входа в систему -пользователь снова нажимает кнопку «Назад» и попадает на страницу приложения, которая может содержать данные, которые нам не нужныбыть здесь.Если они нажимают на любую ссылку на странице, они сразу же отправляются на страницу входа, но они могут просматривать кэшированную страницу из кэша браузера ... каким-либо образом, чтобы не позволить им просмотреть это?

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
    xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-3.0.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:annotation-config />
    <context:component-scan base-package="dc" />
    <global-method-security />
    <http access-denied-page="/auth/denied.html">
         <intercept-url filters="none" pattern="/javax.faces.resource/**" />
         <intercept-url filters="none" pattern="/services/rest-api/1.0/**" />
         <intercept-url filters="none" pattern="/preregistered/*"/>
         <intercept-url
            pattern="/**/*.xhtml"
            access="ROLE_NONE_GETS_ACCESS" />
         <intercept-url
            pattern="/auth/*"
            access="ROLE_ANONYMOUS,ROLE_USER"/>
         <intercept-url
            pattern="/preregistered/*"
            access="ROLE_ANONYMOUS,ROLE_USER"/>
         <intercept-url
            pattern="/registered/*"
            access="ROLE_USER"
            requires-channel="http"/>
        <form-login
            login-processing-url="/j_spring_security_check.html"
            login-page="/auth/login.html"
            default-target-url="/registered/home.html"
            authentication-failure-url="/auth/login.html" />
         <logout invalidate-session="true" 
              logout-url="/auth/logout.html" 
              success-handler-ref="DCLogoutSuccessHandler"/>
        <anonymous username="guest" granted-authority="ROLE_ANONYMOUS"/>
        <custom-filter after="FORM_LOGIN_FILTER" ref="xmlAuthenticationFilter" />
        <session-management session-fixation-protection="none"/>
    </http>
    <!-- Configure the authentication provider -->
    <authentication-manager alias="am">
        <authentication-provider user-service-ref="userManager">
                <password-encoder ref="passwordEncoder" />
        </authentication-provider>
        <authentication-provider ref="xmlAuthenticationProvider" />
    </authentication-manager>
</beans:beans>

Ответы [ 5 ]

3 голосов
/ 18 октября 2014

, чтобы решить эту проблему, вы должны добавить в файл конфигурации xml безопасности:

<security:http auto-config="true" use-expressions="true">

    <security:headers >
        <security:cache-control />
        <security:hsts/>
    </security:headers>
3 голосов
/ 15 апреля 2011

фильтр позаботился о моей ситуации:

package com.dc.api.service.impl;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public class CacheControlFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {

        HttpServletResponse resp = (HttpServletResponse) response;
        resp.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
        resp.setHeader("Last-Modified", new Date().toString());
        resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0");
        resp.setHeader("Pragma", "no-cache");

        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {}

    @Override
    public void init(FilterConfig arg0) throws ServletException {}

}
2 голосов
/ 06 мая 2012

весной 3.0.x

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="cacheSeconds" value="0" />
</bean>

весной 2.5.x

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="cacheSeconds" value="0" />
</bean>
1 голос
/ 29 февраля 2016

Да, я использовал spring-security 3.2.9.RELEASE и просто дал <security:headers /> в одном файле конфигурации Spring, например в файле applicationContext.xml, как в приведенных выше сообщениях

<security:http 
   auto-config="true" use-expressions="true">
   <security:headers />      
</security:http>

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

0 голосов
/ 05 февраля 2013

Если вы, как и я, не работали после использования фильтра кэширования c12, и вы используете <security:http auto-config="true">, убедитесь, что вам больше не нужна часть auto-config="true". Это (похоже на это) добавляет базовую аутентификацию http, которая не обрабатывает выход по протоколу! Это приводит к тому, что вы можете получить свой URL для выхода из системы, но нажатие кнопки «Назад» просто вернет вас назад, поскольку вы на самом деле не вышли из системы.

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