[SPRING] 404 오류가있는 봄 보안 문제가 있습니까?
SPRING404 오류가있는 봄 보안 문제가 있습니까?
인사 모두, 나는 봄 보안 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.당신은 말했습니다 :
당신은 말했습니다 :
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.네, 그냥 이것을 추가하십시오 :
네, 그냥 이것을 추가하십시오 :
<intercept-url pattern="/error/**" access="permitAll" />
그러면 누구나 모든 오류 페이지를 볼 수 있습니다.
-
==============================
3.access = "true"속성을 설정할 때, 사용자가 "true"라는 이름의 보안 속성 (일반적으로 역할)을 가지고 있는지 확인하기 위해 spring-security에 알려준다. 나는 그것이 당신의 목표라고 생각하지 않습니까?
access = "true"속성을 설정할 때, 사용자가 "true"라는 이름의 보안 속성 (일반적으로 역할)을 가지고 있는지 확인하기 위해 spring-security에 알려준다. 나는 그것이 당신의 목표라고 생각하지 않습니까?
보안을 우회하려면 filters = "none"을 설정하고 액세스 속성을 건너 뛸 수 있습니다.
의 문서를 참조하십시오. -
==============================
4.
요소 목록에 / error를 추가하여 액세스하려면 인증을 요구하지 않도록합니다. 요소 목록에 / error를 추가하여 액세스하려면 인증을 요구하지 않도록합니다.
from https://stackoverflow.com/questions/4153438/spring-security-issue-with-404-error by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Hibernate 템플릿은 오라클의 계산 쿼리에서 어떤 객체 유형을 반환합니까? (0) | 2019.03.15 |
---|---|
[SPRING] 하나의 컨텍스트에서 Spring bean을 다른 컨텍스트의 mock 버전으로 대체하십시오. (0) | 2019.03.15 |
[SPRING] 봄 부팅 응용 프로그램에서 여러 데이터베이스에서 테이블이 생성되지 않음 (0) | 2019.03.15 |
[SPRING] SAML 메타 데이터 항목에 대한 서명 신뢰 설정 실패 (0) | 2019.03.15 |
[SPRING] Hibernate SessionFactory 대 EntityManagerFactory [duplicate] (0) | 2019.03.15 |