요르딩딩

[Personal_Project] 스프링 시큐리티 기초 (5) 본문

[Personal_Project]

[Personal_Project] 스프링 시큐리티 기초 (5)

요르딩딩 2021. 4. 23. 17:22
728x90
반응형

이번장에서는 간단한 스프링 시큐리트를 공부하며 맛만 보려고한다.

이번장에서 진행하는 것은 시큐리티의 개념이 적용되었고, 실제 로직은 필터이지 않나 싶습니다. 

아직 시큐리티에 대한 명확한 공부를 하기위한 기초단계이므로 차차 지식을 추가해보도록 하겠습니다.

 

시큐리티를 사용하는 이유는 사용자별로 진입할 수 있는 서비스를 달리 하기 위해서 사용하곤 합니다.

예를 들어 로그인시 관리자는 모든페이지 접근가능하고, 게스트는 일부페이지만 접근가능하도록 설정하는 것입니다.

 

1.  스피링에서 시큐리티 기능을 사용하기 위해서 해당 라이브러리를 web.xml의 <dependency>에 추가해야합니다.

   아래의 소스를 추가해 보시기 바랍니다.

 

[pom.xml]

<!-- Spring Security 사용을 위한 dependency 등록 -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-core</artifactId>
			<version>3.1.0.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>3.1.0.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>3.1.0.RELEASE</version>
		</dependency>

 

2. 이번에는 Dispatcher-servlet전에 필터를 거치도록 <filter>을 설정해 보겠습니다.

    순서 : filter > Dispatcher-servlet > interceptor > controller(Controller) > service(Model) > view (View) [MVC패턴]

 

[web.xml]

<!-- 스프링 시큐리티 필터 추가(DelegatingFilterProxy) -->
	<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>

 

3. 시큐리티 설정을 작성할 context-security를 작성해 보도록 하겠습니다.

<?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.0.xsd
						http://www.springframework.org/schema/security
						http://www.springframework.org/schema/security/spring-security-3.1.xsd">
	<http auto-config='true'>
		<intercept-url pattern="/**" access="ROLE_ADMIN" />
	</http>
	<authentication-manager>
		<authentication-provider>
			<user-service>
				<user name="admin" password="1234" authorities="ROLE_USER, ROLE_ADMIN" />
				<user name="guest" password="1234" authorities="ROLE_USER" />
				<user name="guest2" password="a1234" authorities="ROLE_USER" />
			</user-service>
		</authentication-provider>
	</authentication-manager>
</beans:beans>

<http auto-config='true'>

: 스프링 시큐리티가 기본 로그인페이지를 제공해줍니다. 추후에 로그인 페이지를 개발자 스타일에 맞게 커스텀 할 수 있습니다.

 

<intercept-url pattern=”/**” access=”ROLE_ADMIN” /> :

: “/**” 는 모든 디렉토리와 파일을 가르킵니다. , ROLE_ADMIN만 모든 디렉토리와 파일에 접근할 수 있는 권한을 가진다 의미입니다.

 

<authentication-manager>

: 유저들의 권한을 설정합니다. <user>태그의 authorities 옵션은 해당 유저의 권한을 뜻합니다.

admin 유저는 ROLE_USER ROLE_ADMIN 권한을 갖고 있으며, guest와 guest2 ROLE_USER 권한만 가지고 있음을 뜻합니다.

권한을 설정할 땐 기본적으로 "ROLE_” 를 접두어로 붙여 사용합니다.

만약 다른 네임 규칙을 정하고 싶다면 <authentication-provider> 태그 내에 role-prefix 옵션을 통해 변경할 수 있습니다.

 

4. 브라우저를 통해 테스트를 진행해 보았습니다.

   관리자 아이디로 접근시 해당 API로 접근이 가능합니다.

5. 그러나, 게스트 아이디로 접근시 에러가 발생하는것을 볼 수 있습니다.

참고: shxrecord.tistory.com/161?category=662711

728x90
반응형
Comments