교재
https://thebook.io/080266/0265/
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/
특정 경로에 접근 가능하도록
<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 | 접근 권한이 설정된 사용자를 변수로 재정의하여 설정합니다. |
'IoT 빅데이터 응용 교육 과정_하계' 카테고리의 다른 글
[IoT 빅데이터 응용 교육 과정]23307.04_2 10장 예외처리 (0) | 2023.07.04 |
---|---|
[IoT 빅데이터 응용 교육과정]23.07.04 파일 업로드 (0) | 2023.07.04 |
[IoT 빅데이터 응용 교육 과정] 웹 애플리케이션 (23.06.26_2) (0) | 2023.06.26 |
[IoT 빅데이터 응용 교육 과정] 웹 애플리케이션 (23.06.26_1) (0) | 2023.06.26 |
[IoT 빅데이터 응용 교육 과정] 스프링 MVC 애플리케이션 분석 (0) | 2023.06.22 |