복붙노트

[SPRING] 404 오류가있는 봄 보안 문제가 있습니까?

SPRING

404 오류가있는 봄 보안 문제가 있습니까?

인사 모두, 나는 봄 보안 3.0.2, urlRewrite 3.1.0을 사용하고 있습니다. , 그리고 나는 봄 보안에 문제가있다. 나는 앱의 모든 페이지가 몇몇 페이지를 제외하고 인증을 필요로하므로 내 security.xml은 다음과 같다.

<http use-expressions="true" > 
<intercept-url pattern="/" access="permitAll" />
<intercept-url pattern="/error"  filter="none" />  
<intercept-url pattern="/**" access="isAuthenticated()" />
.
.
.</http>

web.xml에서 오류 페이지를 정의했습니다.

<error-page>
   <error-code>404</error-code>
   <location>/p/error</location>
</error-page>

문제는 내가 로그인 한 사용자가 아니고 app / notFoundUrl과 같은 앱에 존재하지 않는 URL을 입력하면 스프링 보안이이 페이지를 패턴을 / ** 인증에 필요한 페이지와 일치 시켜서 사용자가 예상대로 오류 페이지로 리디렉션되지 않고 로그인 페이지로 리디렉션 된 후 오류 페이지로 리디렉션됩니다.

사용자가 로그인했거나 로그인하지 않은 경우 잘못된 URL을 입력하면 오류 페이지로 직접 리디렉션됩니다.

문제는 web.xml과 관련이 있다고 생각합니다. 여기 있습니다 :

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- Beans in these files will makeup the configuration of the root web application context -->
    <!-- Bootstraps the root web application context before servlet initialization-->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Deploys the 'projects' dispatcher servlet whose configuration resides in /WEB-INF/servlet-config.xml-->
    <servlet>
        <servlet-name>p</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
            /WEB-INF/servlet-config.xml         
            </param-value>
        </init-param>
    </servlet>

    <!-- Maps all /p URLs to the 'p' servlet -->
    <servlet-mapping>
        <servlet-name>p</servlet-name>
        <url-pattern>/p/*</url-pattern>
    </servlet-mapping>

   <error-page>
   <error-code>404</error-code>
   <location>/p/error</location>
   </error-page>


   <!-- force encoding on the requests -->
   <filter>
    <filter-name>encoding-filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding-filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

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



   <filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>

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





    <!-- Security -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
      /WEB-INF/application-config.xml
      /WEB-INF/app-security.xml
      /WEB-INF/mvc-config.xml
    </param-value>
    </context-param>


    <session-config>
      <session-timeout>1</session-timeout> 
    </session-config>


</web-app>

어떤 아이디어이 문제를 해결하는 방법?

해결법

  1. ==============================

    1.당신은 말했습니다 :

    당신은 말했습니다 :

    Spring 보안은 URL이 유효한지 여부를 알기 전에 모든 요청을 차단하여 일부 패턴을 가진 유효한 URL을 가로 채고 마지막에 누군가가 액세스 할 수있는 일반적인 패턴을 추가합니다.

    <intercept-url pattern="/" access="permitAll" />
    <intercept-url pattern="/validUrl1Pattern"  access="permitAll" />  
    <intercept-url pattern="/validUrl2Pattern"  access="permitAll" />  
    <intercept-url pattern="/validUrl2Pattern"  access="permitAll" />  
    ...
    <intercept-url pattern="/**" access="ROLE_ANONYMOUS" />
    

    이 구성의 문제점은 응용 프로그램이 복잡한 경우 모든 유효한 URL에 대한 패턴을 찾기가 쉽지 않다는 것입니다.

  2. ==============================

    2.네, 그냥 이것을 추가하십시오 :

    네, 그냥 이것을 추가하십시오 :

    <intercept-url pattern="/error/**" access="permitAll" />
    

    그러면 누구나 모든 오류 페이지를 볼 수 있습니다.

  3. ==============================

    3.access = "true"속성을 설정할 때, 사용자가 "true"라는 이름의 보안 속성 (일반적으로 역할)을 가지고 있는지 확인하기 위해 spring-security에 알려준다. 나는 그것이 당신의 목표라고 생각하지 않습니까?

    access = "true"속성을 설정할 때, 사용자가 "true"라는 이름의 보안 속성 (일반적으로 역할)을 가지고 있는지 확인하기 위해 spring-security에 알려준다. 나는 그것이 당신의 목표라고 생각하지 않습니까?

    보안을 우회하려면 filters = "none"을 설정하고 액세스 속성을 건너 뛸 수 있습니다.

    의 문서를 참조하십시오.

  4. ==============================

    4. 요소 목록에 / error를 추가하여 액세스하려면 인증을 요구하지 않도록합니다.

    요소 목록에 / error를 추가하여 액세스하려면 인증을 요구하지 않도록합니다.

  5. from https://stackoverflow.com/questions/4153438/spring-security-issue-with-404-error by cc-by-sa and MIT license