스프링 기초_Security_1

bitna's study note·2022년 7월 22일

스프링

목록 보기
24/54

7월 22일

프로젝트를위한 개인공부공부....

1.스프링 Security 를 사용하기 위한 개인 설정

(1)pom.xml설정
아래부분 추가해주기

<!-- Spring Security 설정부분 -->
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>5.0.6.RELEASE</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>5.0.6.RELEASE</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-core</artifactId>
			<version>5.0.6.RELEASE</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-taglibs</artifactId>
			<version>5.0.6.RELEASE</version>
		</dependency>

(2)security-context.xml 만들어서 설정하기
src...>spring 밑에 root-context.xml 파일 있는곳에 동일하게 security-context.xml 파일 만들기

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/security 
http://www.springframework.org/schema/security/spring-security.xsd
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">

		<security:http>
			<security:form-login />
		</security:http>

		<security:authentication-manager>
		
		</security:authentication-manager>

</beans>

(3)web.xml설정하기

<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>
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml
		/WEB-INF/spring/security-context.xml</param-value>
	</context-param>

(4)SampleController 클래스 작성하기

package com.keduit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.log4j.Log4j;

@Log4j
@RequestMapping("/sample/*")
@Controller
public class SampleController {

	/* 로그인을 하지 않은 사용자도 접근 가능한 URI */
	@GetMapping("/all")
	public void doAll() {
		log.info("do all can access everybody");
	}
	
	/* 로그인 한 사용자들만이 접근가능한 URI*/
	@GetMapping("/member")
	public void  doMember() {
		log.info("logined member");
	}
	
	/* 로그인한 사용자들 중에서 관리자 권한을 가진 사용자만이 접근할 수 있는 URI */
	@GetMapping("/admin")
	public void  doadmin() {
		log.info("admin only");
	}
	
	
}

(5)all.jsp, member.jsp, admin.jsp 각각 작성해서 파일 만들고, 테스트 해보기

2.인증과 권한(인가) 부여
스프링 시큐리티에서 제일 중요한건 인증(Authentication)과 권한(Authorization)부분이다.
인증(Authentication)은 쉽게말해 '자신을 증명하는 것'이다.
즉, 자기스스로 무언가 자신을 증명할 만한 자료를 제시하는 것입니다.
반면에 권한부여(Authorization)는 남에 의해서 자격이 부여된다는 점에서 차이가 있다.

엔지니어 A는 B회사에 고장 난 데이터베이스를 고치기 위하여 방문한다.
방문한 A씨가 우선 회사입구에서 출입증을 검사하는 직원에게 A의 신분을 밝힙니다.
이처럼 인증은 본인이 누구인지를 증명하는 행위라 보면 됩니다.

회사내부에 들어간 A는 담당자를 만나서 데이터베이스의 접근 권한 등의 정보를 얻어야 합니다. 이 과정을 '인가' 혹은 '권한부여'라고 볼 수 있습니다.
조회/수정권한 부여받은 A는 데이터베이스를 조회하거나 수정할수 있습니다.

시큐리티 내부에서도 이와 같은 방식으로 작동합니다.

(1)Authentication Manager(인증 매니저)
스프링 시큐리티에서 가장 중요한 역할을 하는 존재가
인증을 담당하는 Authentication Manager(인증 매니저) 라는 존재 입니다.
Authentication Manager(인증 매니저) 다양한 방식의 인증을 처리할 수 있도록 아래 구조로 설계되어 있습니다.

Provider Manager는 인증에 대한 처리를 AuthenticationProvider(인증제공자) 라는 타입의 객체를 이용해서 처리를 위임한다.

AuthenticationProvider(인증제공자)는 실제 인증 작업을 진행한다.
이때 인증된 정보에는 권한에 대한 정보를 같이 전달하게 되는데
이 처리는 UserDetailsService라는 존재와 관련 있습니다.
UserDetailsService 인터페이스의 구현체는 실제로 사용자의 정보와 사용자가 가진 권한의 정보를 처리해서 반환하게 됩니다.

스프링 시큐리티를 커스터마이징 하는 방식은 크게 AuthenticationProvider를 직접 구현하는 방식과 실제처리를 담당하는 UserDetailsService를 구현하는 방식으로 나눠지는데, 대부분은 경우에는 UserDetailsService를 구현하는 형태를 사용하는것만으로도 충분하다.

profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글