스프링 31강 - 스프링 시큐리티, Controller 응답 정리

voilà!·2022년 2월 14일
0

JSP 스프링

목록 보기
31/31

1. 스프링 시큐리티란?

  • 애플리케이션에서 보안 기능을 구현하는데 사용되는 프레임워크(디자인패턴 + 라이브러리)
  • 필터 기반으로 동작하므로 스프링 MVC와 분리되어 동작함

2. 주요 기능

  • 인증(Authentication) : 사용자의 정당성 확인(로그인)
  • 인가(Authorization) : 리소스나 처리에 대할 접근 제어(권한)

3. 제공 기능

  • 세션 관리
  • 로그인 처리
  • 암호화 처리
  • 자동 로그인
  • SRF(Cross-site request forgery) 토큰 처리
    : 웹 사이트 취약점 공격을 막아줌
    : 사용자가 자신도 모르게 공격자가 의도한 행위(수정, 삭제 등록)을 웹 사이트에 요청하게 하는 공격
  1. 웹 화면 접근 정책
    1) 회원 게시판(board)
  • 목록(list) : 모두 접근 가능
  • 등록(register) : 로그인한 회원만 접근 가능

2) 공지사항 게시판(notice)

  • 목록(list) : 모두 접근 가능
  • 등록(register) : 로그인한 관리자만 접근

4. 설정

1) 라이브러리 설치
https://mvnrepository.com/ 에서

Spring-security-web » 5.0.7.RELEASE - 중간 코드 복사 후
pom.xml에 붙여넣기
Spring Security Config » 5.0.7.RELEASE - 중간 코드 복사 후 pom.xml에 붙여넣기
Spring Security Core » 5.0.7.RELEASE - 중간 코드 복사 후
pom.xml에 붙여넣기
Spring Security Taglibs » 5.0.7.RELEASE - 중간 코드 복사 후 pom.xml에 붙여넣기

프로젝트 우클릭 후 Run As - 4번 클릭 - build success 나오면 성공!

pom.xml

		<!-- 스프링 시큐리티 라이브러리 의존관계 정의 시작 -->
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
		<dependency>
		    <groupId>org.springframework.security</groupId>
		    <artifactId>spring-security-web</artifactId>
		    <version>5.0.7.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.7.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.7.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.7.RELEASE</version>
		</dependency>
		<!-- 스프링 시큐리티 라이브러리 의존관계 정의 끝 -->

2) web.xml에 아래 코드 추가하기

  • contextConfigLocation에 스프링 시큐리티 설정 파일을 지정
  • 스프링 시큐리티는 필터 기반으로 동작하기 때문에 필터 지정
	<!-- contextConfigLocation에 스프링 시큐리티 설정 파일을 지정함 -->
	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<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>

3) security-context.xml 생성
상단에 아래 코드 추가하기

<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-5.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

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>
	<!-- 
	URI 패턴으로 접근 제한을 설정함 
	pattern : url 요청 경로
	access : 접근 제한 정책
	-->
		<security:intercept-url pattern="/board/list" access="permitAll"/> <!-- 모든 사용자에게 접근권한 허용 시(정해진 약속 access) -->
		<security:intercept-url pattern="/board/register" access="hasRole('ROLE_MEMBER')" />
		<security:intercept-url pattern="/notice/list" access="permitAll" />
		<security:intercept-url pattern="/notice/register" access="hasRole('ROLE_ADMIN')" />
		<!-- 폼 기능 인증 기능 사용.
		접근 제한에 걸리면 스프링 시큐리티가 기본적으로 제공하는 로그인 페이지로 이동함 -->
		<security:form-login/>
	</security:http>
	
	<security:authentication-manager>
	<!-- 
	지정된 아이디와 패스워드로 로그인이 가능하도록 설정함
	authorities : 위의 <security:intercept-url의 "hasRole('ROLE_MEMBER')"을 말한다.
	member 사용자 : /board/list, /board/register, /notice/list 가능
	admin 사용자 : /board/list, /board/register, /notice/list, /notice/register 가능
	
	스프링 시큐리티 5버전부터는 패스워드 암호화 처리기를 반드시 이용하도록 변경이 되었음
	암호화 처리기를 사용하지 않도록 "{noop}" 문자열을 비밀번호 앞에 사용.
	
	 -->
		<security:authentication-provider>
			<security:user-service>
				<security:user name="member" password="{noop}1234" authorities="ROLE_MEMBER" />
				<security:user name="admin" password="{noop}abcd" authorities="ROLE_MEMBER,ROLE_ADMIN" />
			</security:user-service>
		</security:authentication-provider>
	</security:authentication-manager>	
		
</beans>		

Controller 응답 정리

1.void

  • 호출하는 URL과 동일한 뷰 이름을 나타냄
  • 요청이 /notice/list이면, 뷰는 /notice/list.jsp를 가리킴

2.string

3.자바빈즈 클래스(VO)

4.컬렉션 List

5.컬렉션 Map

6.ModelAndView

0개의 댓글