IoT 빅데이터 응용 교육 과정_하계

[IoT 빅데이터 응용 교육과정] 23.07.03_1 8장 스프링 시큐리티

연지양갱 2023. 7. 3. 11:57
728x90
반응형
SMALL

교재

https://thebook.io/080266/0265/

 

스프링 코딩 공작소: 8.1.1 스프링 시큐리티

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 

 

8.1.1.

 

스프링 시큐리티

 

pom.xml 파일에 의존 라이브러리 등록하기

 

 

 

spring-security-web.jar

spring-security-config.jar

 

시큐리티 필터 - 인증의 필요 여부를 확인하는 것

 

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>

 

 

시큐리티 설정 파일 등록하기

빈을 위한 파일로 web.xml 파일의 context-param요소에 시큐리티 설정 파일을 등록하여 읽게 함

 

*** 위 교재 : 시큐리티 설정 파일이 빠져있음!!!

WEB-INFO -> spring -> security-contect.xml

security-contect.xml

 

 

 

스프링 시큐리티 태그

허가된 사용자만 특정 페이지만 접근 가능하도록 

인증 처리하기 위한 정보 파일

 

시큐리티 컨텍스트에 계정을 추가

security-context.xml파일에 확인 가능

 

주요 스프링 시큐리티 태그의 종류

태그 설명
<http> 시큐리티의 시작과 끝을 나타내는 데 사용합니다.
<intercept-url> 시큐리티가 감시해야 할 URL과 그 URL에 접근 가능한 권한을 정의하는 데 사용합니다.
<form-login> 로그인 관련 설정을 하는 데 사용합니다.
<logout> 로그아웃 관련 설정을 하는 데 사용합니다.
<authentication-manager> 사용자 권한 서비스의 시작과 끝을 나타내는 데 사용합니다.
<authentication-provider> 사용자 정보를 인증 요청하는 데 사용합니다.
<user-service> 사용자 정보를 가져오는 데 사용합니다.
<user> 사용자 정보를 나타내는 데 사용합니다.

 

 

 

8.2.1 접근 권한을 설정하는 시큐리티 태그

https://thebook.io/080266/0269/

 

스프링 코딩 공작소: 8.2 접근 권한과 사용자 권한 설정

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

특정 경로에 접근 가능하도록 

 

 

<http>태그

속성 설명
auto-config 일반적인 웹 애플리케이션에 필요한 기본 보안 서비스를 자동으로 설정합니다.
use-expressions <intercept-url> 태그의 access 속성에서 스프링 표현 언어(SpEL)를 사용할 수 있습니다.

 

 

 

<intercept-url>태그

url 패턴을 설정할 때 사용

속성 설명
pattern ant 경로 패턴(?(문자 한 개와 매칭), *(0개 이상의 문자와 매칭), **(0개 이상의 디렉터리와 매칭))을 사용하여 접근 경로를 설정합니다.
access pattern 속성에 설정된 경로 패턴에 접근할 수 있도록 사용자 권한을 설정합니다.
requires-channel 정의된 패턴 URL로 접근하면 설정된 옵션 URL로 리다이렉션합니다. 옵션으로는 http, https, any가 있습니다.

** : 티렉터리와 매칭 => 모든 것을 대체함

 

xml 파일 생성 -> 일반 파일 생성과 동일

 

 

설명
hasRole([role]) • 현 권한자가 지정된 [role]을 가졌다면 true로 반환합니다.
• [role]에서 ‘ROLE_’ 접두어를 생략할 수 있습니다.
hasAnyRole([role1, role2]) • 현 권한자가 지정된 [role1, role2]에서 하나라도 가졌다면 true를 반환합니다.
• 콤마로 구분하여 표현하고 ‘ROLE_’ 접두어를 생략할 수 있습니다.
hasAuthority([authority]) • 현 권한자가 지정된 [authority]를 가졌다면 true로 반환합니다.
• [authority]에서 ‘ROLE_’ 접두어를 생략할 수 있습니다.
hasAnyAuthority([authority1, authority2]) • 현 권한자가 지정된 [authority1, authority2]에서 하나라도 가졌다면 true를 반환합니다.
• 콤마로 구분하여 표현하고 ‘ROLE_’ 접두어를 생략할 수 있습니다.
principal 현 사용자를 나타내는 주요 객체에 직접 접근할 수 있도록 허락합니다.
authentication SecurityContext에서 얻은 현 인증 객체에 직접 접근할 수 있도록 허락합니다.
permitAll 현 권한자에 상관없이 항상 true입니다.
denyAll 현 권한자에 상관없이 항상 false입니다.
isAnonymous() 현 권한자가 익명의 사용자이면 true를 반환합니다.
isRememberMe() 현 권한자가 기억된 사용자이면 true를 반환합니다.
isAuthenticated() 사용자가 익명이 아니면 true를 반환합니다.
isFullyAuthenticated() 익명의 사용자이거나 기억된 사용자가 아니면 true를 반환합니다.

 

권한을 지정할 때 사용하는 표현

권한 설명
ROLE_ADMIN 관리자
ROLE_USER 일반 사용자
ROLE_ANONYMOUS 모든 사용자
ROLE_RESTRICTED 제한된 사용자
IS_AUTHENTICATED_FULLY 인증된 사용자
IS_AUTHENTICATED_ANONYMOUSLY 익명 사용자
IS_AUTHENTICATED_REMEMBERED REMEMBERED 사용자

 

추가할 security-content파일내 코드

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans...>

    <http use-expressions="true">
        <intercept-url pattern="/admin/**" access="hasAuthority('ROLE_ADMIN')"/> 
        <intercept-url pattern="/manager/**" access="hasRole('ROLE_MANAGER')"/> 
        <intercept-url pattern="/member/**" access="IsAuthenticated()"/> 
        <intercept-url pattern="/**" access="permitAll"/> 
    </http>
...
</beans:beans>

 

 

 

 

사용자 권한 설정 태그

종류 설명
<authentication-manager> 사용자 권한 인증을 위한 최상위 태그입니다.
<authentication-provider> 사용자 정보를 인증 요청 처리할 경우 사용합니다.
<user-service> 사용자 정보(사용자 ID, 사용자 암호, 권한 등)를 가져올 때 사용합니다.
<user> name, password, authorities 속성으로 사용자 정보를 나타낼 때 사용합니다.

 

실습 코드

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans...>
... 
<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="admin" password="{noop}1234" authorities="ROLE_ADMIN, ROLE_USER"/>; 
            <user name="manager" password="{noop}1235" authorities="ROLE_MANAGER"/>
            <user name="guest" password="{noop}1236" authorities="ROLE_USER"/>
        </user-service>
    </authentication-provider>
</authentication-manager>
</beans:beans>

1. user 태그가 있음 , name=admin, password=1234, 사용자 권한과 관리자 권한(ROLE_ADMIN, ROLE_USER)이 있음

2.

3.

 

실습실습

 

http://..admin/main 등

requestMethod2()

requestMethod3()

requestMethod4()

requestMethod5()

 

${data} -> 앞 컨트롤러에서 지정하ㅏㅁ

 

 

 

 

 

 

 

시큐리티 태그

jsp 뷰페이지에서 태그 라이브러리를 선언해야함

의존 라이브러리를 등록해야 함

 

속성 설명
access 접근 권한 설정을 위한 정규 표현식을 설정합니다.
url 접근 권한이 설정된 사용자만 접근하도록 경로를 설정합니다.
var 접근 권한이 설정된 사용자를 변수로 재정의하여 설정합니다.
// 사용자가 설정된 권한일 때
<sec:authorize access="hasRole('ROLE_ADMIN')">...</sec::authorize>

// 사용자가 설정 권한을 가지고 있지 않을 때
<sec:authorize access="!hasRole('ROLE_ADMIN')">...</sec::authorize>

// 사용자가 둘 중 하나의 권한을 가질 때
<sec:authorize access="hasAnyRole('ROLE_ADMIN','ROLE_MANAGER')"">...</sec:authorize>

// 사용자가 로그인할 때
<sec:authorize access="isAuthenticated()">...</sec:authorize>

// 사용자가 로그인하지 않을 때
<sec:authorize access="isAnonymous()">...</sec:authorize>

 

 

<sec:authorize>

컨트롤러 내 Model 객체 생성

Model 객체 생성 -> 정보를 메소드에 전달

 

 

 

인증 태그: <sec:authoentication>

태그의 속성

authentication 객체에 대한 접근을 허용

 

속성 설명
property 접근 권한이 설정된 현재 authentication 객체 이름입니다.
scope 접근 권한이 설정된 영역입니다.
var 접근 권한이 설정된 사용자를 변수로 재정의하여 설정합니다.

 

반응형