[SPRING] Spring Security와 Struts2를 통합하는 방법
SPRINGSpring Security와 Struts2를 통합하는 방법
나는이 문제와 관련하여 수 많은 인터넷 검색을 수행했으며, 지금까지는 Struts2와 Spring Security의 통합에 관한 튜토리얼을 찾을 수 없었다.
제 질문은 Spring Security와 Struts2를 어떻게 통합할까요?
특정 작업이나 페이지를 제한하려면 관리 페이지 / URL에 액세스해야합니다. 예를 들어 사용자가 해당 페이지에 액세스하려고 시도하면 관리자는 다른 페이지로 리디렉션됩니다.
해결법
-
==============================
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.이것은 실제로 매우 간단합니다. 스프링 보안은 웹 프레임 워크에 대한 불가지론입니다 :)
이것은 실제로 매우 간단합니다. 스프링 보안은 웹 프레임 워크에 대한 불가지론입니다 :)
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" />
어떤 기능이 필요한지 알려주고 방향을 알려줄 수 있습니다. 네임 스페이스 설정은 은하가 아닙니다. 매우 맞춤화 된 솔루션이 필요하다면 모든 스프링 빈을 직접 설정해야 할 필요가있을 수도 있지만, 문서에서는 이것을 잘 설명합니다.
from https://stackoverflow.com/questions/14333999/how-to-integrate-spring-security-and-struts2 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] MTOM 첨부 파일이있는 Spring-WS 웹 서비스 - Hello world test (0) | 2019.03.16 |
---|---|
[SPRING] 여러 장의 ActiveMQ 인스턴스를 구성하는 스프링 부트 (0) | 2019.03.16 |
[SPRING] JSP 및 정적 리소스를 포함한 스프링 부팅 응용 프로그램 패키지 (0) | 2019.03.16 |
[SPRING] 시퀀스 "HIBERNATE_SEQUENCE"을 (를) 찾을 수 없습니다. SQL 문 (0) | 2019.03.16 |
[SPRING] XSS를 방지하기 위해 c : out을 사용하는 대신 (0) | 2019.03.16 |