inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티

4) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (1)

getAttributes() null 리턴과 PermitAllFilter

354

개발중

작성한 질문수 32

0

안녕하세요 강사님

강의를 보면 로그인 없이 /mypage에 접근하면  getAttributes()에서 null를 리턴하여 에 접근하게 됩니다.

의문이 드는 건

1. /mypage 접근할 때 인증 처리 후  인가 처리가 되어야 하는게 아닌지..

security config의 .anyRequest().authenticated() 도 무시되는 건가요? /mypage 및 DB에서 관리하지 않는 자원에 접근 시 인증 체크가 먼저 되어야 하지 않나요?

2.  DB에서 관리하지 않는 자원이면 접속 가능한데 PermitAllFilter 가 왜 필요한지.

PermitAllFilter 는 인가 처리의 앞단에서 다음 인가 프로세스로 넘어가지 않도록 하는 목적인가요?

3. 정적 자원 인가

getAttributes() 메서드에 값을 확인해보면 아래 로그처럼 정적 자원에 대한 인가 체크를 하고 있습니다. 

web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); 설정으로 정적 자원은 

security 처리 과정에서 무시되는 것이 아닌지요?

감사합니다.

spring-boot Spring Security java

답변 1

0

정수원

1. /mypage 접근할 때 인증 처리 후  인가 처리가 되어야 하는게 아닌지..

스프링 시큐리티에서는 인증 자체도 권한의 범주안에 포함됩니다.
즉 인증된 사용자 자체가 인증되었다는 권한을 가진다는 의미입니다.

그렇기 때문에 
security config의 .anyRequest().authenticated() 구문은 인증된 사용자가 아니면 어떠한 자원에도 접근이 되지 않는다는 의미의 권한으로 정의 될 수 있습니다.

다만 위의 구문을 처리하는 클래스는 표현식을 처리하는  ExpressionBasedFilterInvocationSecurityMetadataSource 클래스가 담당하고 있습니다.

그런데 DB  와 연동해서 권한과 자원에 대한 제어를 하는 클래스는 사용자가 직접 구현한 UrlFilterInvocationSecurityMetadataSoruce 가 처리하도록 되어 있기 때문에  security config의 .anyRequest().authenticated() 구문을 해석할 수가 없고 또한 security config의 .anyRequest().authenticated() 구문에 대한 참조 자체를 하지도 않습니다.

그렇기 때문에 인증을 받지 않는 사용자도 UrlFilterInvocationSecurityMetadataSoruce 에서 참조하고 있지 않은 자원에 접근을 해도 통과가 되어 버립니다.

즉 인증 사용자 및 비인증 사용자 모두 DB 에서 관리하는 자원과 권한의 정책에 따라 접근여부를 결정해야 합니다.

2.  DB에서 관리하지 않는 자원이면 접속 가능한데 PermitAllFilter 가 왜 필요한지.

PermitAllFilter 는 인가 처리의 앞단에서 다음 인가 프로세스로 넘어가지 않도록 하는 목적인가요?

네 맞습니다.

PermitAllFilter 는 인가 프로세스 단계로 넘어가기 전 단계에서 권한 처리를 하는 역할을 합니다.

DB 에서 관리하지 않는 자원인데도 불구하고 인가 프로세스의 모든 과정을 거치게 되는 것이 비효율적이라 판단해서 앞 단계에서 미리 처리한다는 의미로서 PermitAllFilter 의 기능을 추가했다고 보시면 되겠습니다.

3. 정적 자원 인가

네 그렇습니다.

web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations());  

은 스프링 시큐리티의 보안 Filter를 거치지 않도록 하는 설정입니다.

즉 인증 및 인가 처리에서 모두 제외되도록 내부적으로 처리가 됩니다.

0

개발중

상세한 답변 감사합니다.

3번에 대해 다시 질문 드립니다. 

getAttributes() 메서드 request.getRequestURI() 에는 /js/jquery .. 등등의 정적 자원 접근도 로그 화면을 보시면 DB 자원과 비교를 하고 있습니다.

/js, /css 등의 정적자원 접근은 UrlFilterInvocationSecurityMetadatsSource 까지 넘어가지 않아야 하는 게 아닌지요?

감사합니다.

시큐리티 공부 버전 질문

0

188

1

[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈

0

196

1

AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우

0

185

1

강의 코드가 왜이렇게 뒤죽박죽인가요...

0

270

1

메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..

0

247

1

파라미터값이 넘어가지 않습니다 ....

0

381

1

security filterChain 설정 질문이 있습니다.

0

336

1

소스 부분 질문 드립니다.

0

212

2

섹션4 7번 강의 문제가 있는거 같네요.

0

351

2

파일이 수시로 이름이 바껴있네요 ㄷㄷ

0

308

1

HttpSessionSecurityContextRepository를 사용안하는 문제

0

563

2

error , exception 이 잘 안됩니다.

0

288

2

thymeleaf tag 질문합니다.

0

200

2

버전업하면서 deprecated된 것들이 너무많아요

0

482

1

spring security 패치 관련

0

442

1

모바일을 사용할때 토큰말고 세션

0

863

2

DB 연동한 인가 부분에 대한 질문입니다!

0

267

1

Ajax방식도 똑같이 Session방식을 사용하는건가요?

0

311

1

Config 파일 생성 시 질문이 있습니다.

0

233

1

강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..

1

440

2

403 에러 뜹니다.

0

817

2

login_proc의 존재에 대한 간략한 설명입니다

0

280

1

top.html에 로그인 링크를 만들어서 로그인을 해봤습니다

0

290

2

안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!

0

193

1