2012-05-06 2 views
1

현재 JSP 페이지를 보호하고 표시 할 수 있지만 나머지 종료점은 찾을 수 없습니다 (나머지 모든 AJAX 호출의 경우 404). 나머지 끝점을 찾았지만 HTML 캔트를 발견하고 보안 검사를 수행하지 않을 경우 다른 것을 변경했습니다.저지 스프링 보안 HTML AJAX가 예상대로 작동하지 않습니다.

무엇이 누락 되었습니까?

security.xml

<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    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/security 
      http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

    <http pattern="/images/**" security="none"/> 
    <http pattern="/css/**" security="none"/> 
    <http pattern="/js/**" security="none"/> 
    <http auto-config="true" disable-url-rewriting="true"> 
     <intercept-url pattern="/login-page.html" access="ROLE_ANONYMOUS"/> 
     <intercept-url pattern="/**" access="ROLE_USER, ROLE_ADMIN" /> 
     <form-login login-page='/login-page.html' default-target-url="/static-page.jsp" /> 
    </http> 
    <authentication-manager> 
     <authentication-provider> 
      <jdbc-user-service data-source-ref="dataSource" 
       users-by-username-query="select USERNAME, PASSWORD, ENABLED 
        from USERS where USERNAME=?" 
       authorities-by-username-query=" 
        select U.USERNAME, UR.AUTHORITY from USERS U, ROLES UR 
        where U.USERNAME=UR.USERNAME and U.USERNAME=?"  
      /> 
     </authentication-provider> 
    </authentication-manager> 
</beans:beans> 

web.xml의 웹 애플리케이션 폴더에서

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:server-context.xml, classpath:spring-security.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>jersey-servlet</servlet-name> 
     <servlet-class> 
      com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>service.admin</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>jersey-servlet</servlet-name> 
     <url-pattern>/test-app/*</url-pattern> 
    </servlet-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> 
</web-app> 

나는 * .jsp를 JS에게 WEB-INF 아래 파일을 & CSS & 이미지 폴더 플러스 * .html 중에서 및가 web.xml 폴더가있는 곳입니다. 다른 곳에서 html 파일을 넣어야하고 web.xml에 어떻게 매핑해야합니까?

+0

2 개의 개별 질문. 당신은 참석하는 사람들이 모순되는 세부 사항에 산만 해지지 않으므로 더 나은 답변을 얻을 수 있습니다. – jmort253

+0

이 두 번째 질문에 대한 가정 해 봅시다. 'HTML 페이지에서도 작동 할 수 있습니까?' HTML 페이지에서 작동한다는 것은 무엇을 의미합니까? – jmort253

+0

두 번째 질문은 제거되었지만 질문에 답하기 위해 로그인하지 않은 경우 스프링 보안으로 정적 HTML 파일을 보호하고 강제로 로그인 할 수 있습니다. – Dennis

답변

3

HTML 파일을 보호하려면 먼저 안전한 위치에 파일을 배치해야합니다. WEB-INF 폴더는 HTTP에서 액세스 할 수없는 응용 프로그램에 배포 된 유일한 폴더입니다. 따라서 폴더에는 HTML 파일을 보관할 수있는 좋은 장소가 있습니다. 나는/WEB-INF/html을 추천한다.

다음으로 * .html에 대한 모든 요청을/WEB-INF/html 폴더에 매핑하도록 Spring에 지시해야합니다. 이것은 Spring servlet.xml 파일의 xml 요소 안에 위치해야합니다.

HTML-servlet.xml에 :

<mvc:resources mapping="/**" location="/WEB-INF/html/" /> 

자세한 내용은 How To Secure MVC Resources를 참조하십시오.

당신은 각각의 HTML 파일에 대한 security.xml 파일에 일부 HTTP 항목을 추가해야합니다 :

<intercept-url pattern="/users-only.html" access="ROLE_USER" /> 

이 자원을 확인하고 사용자의 역할에 따라 그것을 리디렉션 봄 필터를 사용합니다.

마지막으로, 당신은 요청을 처리하는 서블릿의 web.xml 파일에 항목을해야하는 * .html 중에서

의 web.xml : 당신은 실제로이 점을 나누는 할 수 있습니다

<!-- Security --> 
<servlet> 
    <servlet-name>html</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/html-servlet.xml</param-value> 
    </init-param> 
</servlet> 

<!-- Secure static HTML files. See applicationContext-Security.xml intercept-url for individual HTML file control over security.--> 
<servlet-mapping> 
    <servlet-name>html</servlet-name> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 
+0

이것을 위해 spring-webmvc를 사용해야합니까? – Dennis

+0

스프링 웹 패키지라고 생각합니다. 당신은 그것을 밖으로 시도해야 할 것입니다. * .html에 대한 모든 요청이 보안 필터를 통과하는 서블릿에 의해 처리된다는 것을 확신 할 수만 있다면 작동 할 수 있다고 생각합니다. 이 기능을 사용하려면 다소 시간이 걸렸으며 Google App Engine에서 Spring 3.0.5와 Spring 3.0.7을 사용하고 있습니다. – jmort253

+0

* .html을 별도의 Jersey 서블릿에 매핑 할 수는 있지만 Jersey 매핑을 보지 않아도 익숙하지 않아 도움이되지 않습니다. – jmort253

관련 문제