복붙노트

[SPRING] Spring Security와 Struts2를 통합하는 방법

SPRING

Spring Security와 Struts2를 통합하는 방법

나는이 문제와 관련하여 수 많은 인터넷 검색을 수행했으며, 지금까지는 Struts2와 Spring Security의 통합에 관한 튜토리얼을 찾을 수 없었다.

제 질문은 Spring Security와 Struts2를 어떻게 통합할까요?

특정 작업이나 페이지를 제한하려면 관리 페이지 / URL에 액세스해야합니다. 예를 들어 사용자가 해당 페이지에 액세스하려고 시도하면 관리자는 다른 페이지로 리디렉션됩니다.

해결법

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

    1./ admin / * 경로에서 액세스 할 수있는 것을 보호해야한다고 가정 해 보겠습니다. web.xml에 Spring Security Filter를 선언해야한다. Struts 필터는 / admin에 접근 할 때 Spring Security가 먼저 요청을 처리하고 그것을 통과 시키거나 차단할 수 있도록해야한다. 사용자 역할

    / admin / * 경로에서 액세스 할 수있는 것을 보호해야한다고 가정 해 보겠습니다. web.xml에 Spring Security Filter를 선언해야한다. Struts 필터는 / admin에 접근 할 때 Spring Security가 먼저 요청을 처리하고 그것을 통과 시키거나 차단할 수 있도록해야한다. 사용자 역할

    <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>/admin/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    그런 다음 봄 보안 컨텍스트를 선언합니다.

    <http>
        <intercept-url pattern="/*" filters="none" />
        <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
        <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />           
        <form-login login-page="/login" />
        <logout logout-url="/logout" />
    </http>
    

    / login과 같은 URL이 com.foo.bar.actions.LoginAction이라는 클래스에 자동으로 바인딩되도록 struts2-convention 플러그인을 사용하는 것이 좋습니다. LogoutAction과 동일

    이제 / admin / * 아래에있는 것은 Spring Security에 의해 보호되어야하고 나머지는 Struts2 필터로 직접 전달되어야합니다.

    마지막으로 JSP에서 누군가가 관리자인지 확인할 수 있습니다.

    <sec:authorize access="hasRole('ROLE_ADMIN')">
       <p>you are an admin</p>
    </sec:authorize>
    

    나머지는 스프링 보안 튜토리얼에서 찾을 수 있습니다. 정말로 중요한 것은 필터 선언의 순서입니다. 봄 보안이 가장 먼저 나와야합니다.

    편집 : Google에서 검색, 당신을 위해 도움이 될 수있는이 링크가 있습니다.

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

    2.이것은 실제로 매우 간단합니다. 스프링 보안은 웹 프레임 워크에 대한 불가지론입니다 :)

    이것은 실제로 매우 간단합니다. 스프링 보안은 웹 프레임 워크에 대한 불가지론입니다 :)

    Spring Security 필터 체인을 정의해야합니다. 이것은 모든 요청에 ​​매핑되어야하는 Java Filter입니다. 필터는 경로에 권한이 필요한지 여부를 확인하고, 그렇다면 사용자가 로그인되어 있고 권한이 있는지 확인합니다.

    간단한 설치 예.

    web.xml (기존의 struts 설정과 함께 삽입) :

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:META-INF/spring/applicationContext-security.xml
        </param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <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>
    

    Spring 보안 설정 (contextConfigLocation 매개 변수에서 web.xml에 언급 된 파일에서) :

    <?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: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.1.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security-3.1.xsd">
    
    <http pattern="/js/**" security="none" />
    <http pattern="/css/**" security="none" />
    <http pattern="/images/**" security="none" />
    
    <http auto-config="false" use-expressions="true">
        <http-basic/>
        <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
        <session-management session-fixation-protection="newSession" />
    </http>
    </beans:beans>
    

    원하는대로 이것을 확장 할 수 있습니다 - Spring의 문서는 꽤 잘 작성되어 있습니다.

    더 단순한 자동 설정을 할 수 있습니다 :

    <http auto-config='true'>
        <intercept-url pattern="/**" access="ROLE_USER" />
    </http>
    

    위 옵션은 요청 경로별로 웹 앱을 보호합니다. 행동을 안전하게 할 수도 있습니다. 아래에 추가하면 갈 수 있습니다 :

    <global-method-security secured-annotations="enabled" pre-post-annotations="enabled" proxy-target-class = "true" />
    

    어떤 기능이 필요한지 알려주고 방향을 알려줄 수 있습니다. 네임 스페이스 설정은 은하가 아닙니다. 매우 맞춤화 된 솔루션이 필요하다면 모든 스프링 빈을 직접 설정해야 할 필요가있을 수도 있지만, 문서에서는 이것을 잘 설명합니다.

  3. from https://stackoverflow.com/questions/14333999/how-to-integrate-spring-security-and-struts2 by cc-by-sa and MIT license