inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티 완전 정복 [6.x 개정판]

프로그래밍 방식의 인가 구현 – DB 연동

15섹션 프로그래밍 방식의 인가 구현 – DB 연동 / 여러개의 권한매핑

401

ckdtjd1272

작성한 질문수 1

1

섹션 15 (프로그래밍 방식의 인가 구현 – DB 연동) 강의에서 6:10 에 작성하신 코드

위 코드에 대해서 질문 드립니다.

 

저는 PageDto라는 객체를 만들고

해당 객체는 String url, Set<PageRole>으로 구성되어있고

위와 같이 코드를 작성하였습니다.

데이터를 Map에 넣고 콘솔창에 출력해보았을 때

url값이 중복이라(맵의 key값) 마지막 권한만이 Map<String, String>객체에 들어가는데 하나의 url에 여러 개의 권한을 매핑 할 때 해당 구조로 작성 하는 것이 맞는지 질문 드립니다.

만약에 Map<String, Set>구조이면 이후 커스텀 매니저에서 setMapping()의 로직이 달라지는지도 궁금합니다.

 

spring spring-boot spring-security security web-security

답변 1

1

정수원

아 네

Map 의 특성상 키 중복이 일어날 수 있습니다.

일단 아래와 같이 할 수 있습니다. 물론 이 방식 외에 다른 방식으로도 가능합니다.

PersistentUrlRoleMapper.java

@Override
public Map<String, String> getUrlRoleMappings() {

    List<Resources> resourcesList = resourcesRepository.findAllResources();
    resourcesList.forEach(re -> {
        re.getRoleSet().forEach(role -> { // 키를 중복되지 않도록 설정
            urlRoleMappings.put(re.getId() + "|" + re.getResourceName(), role.getRoleName());
        });
    });
    return urlRoleMappings;
}
CustomDynamicAuthorizationManager.java

@PostConstruct
    public void mapping() {

        DynamicAuthorizationService dynamicAuthorizationService =
                new DynamicAuthorizationService(new PersistentUrlRoleMapper(resourcesRepository));

        mappings = dynamicAuthorizationService.getUrlRoleMappings()
                .entrySet().stream()
                .map(entry -> {
                    // 키 값으로부터 url 값만 추출해서 설정
                    String url = entry.getKey().substring(entry.getKey().indexOf("|")+1);
                    RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry
                            = new RequestMatcherEntry<>(
                            new MvcRequestMatcher(handlerMappingIntrospector, url),
                            customAuthorizationManager(entry.getValue()));
                            return requestMatcherEntry;
                })
                .collect(Collectors.toList());
    }

1

ckdtjd1272

빠른 답변 감사합니다.

키값에 변형을 주는것이 아닌 value 값을 각각의 권한이 아닌 url에 매핑되어있는 권한의 Set구조를 넣어

return을 Map<String,Set>으로 하여 매니저 단에서 forEach를 돌려서 해보겠습니다.

 

감사합니다~!!

로그아웃-logout()-2 강에서 겟방식 로그아웃 호출 후 화면이동 질문입니다.

0

28

2

단원별 소스코드

0

60

2

CustomAuthenticationProvider 추가 관련 문의

0

69

2

AOP 의존성 명칭 변경

0

65

1

빈 1개 등록 시 다른 해결 방법

0

65

1

@Bean으로 AuthenticationProvider를 등록 시 http.authenticationProvider 함수를 이용해서 추가해줘야되나요?

0

85

2

OIDC의 id token에 담긴 데이터에 대해

0

74

1

loginPage("/loginPage") 질문드립니다.

0

69

1

@EnableWebSecurity

0

147

1

트랜잭션과 롤백

0

99

1

68. 인증 이벤트 - AuthenticationEventPublisher 활용 강좌 음성 문제

0

89

2

AuthenticationManager 사용 방법

0

148

2

HttpSecurity.authorizeHttpRequests() - 2 강의 부분에 대한 질문

0

104

2

spring security 6.3에서는 HttpSecurity가 만들어지기 전 WebSecurity가 먼저 만들어지는게 맞나요??

0

190

1

init(B Builder), configure(B builder) 에 대하여 질문 드립니다.

0

106

2

메타 주석 질문

0

68

1

동시세션제어 기능에서 로그아웃하기

0

147

3

로그인 후, redirect 에서 error

0

138

3

Session 생성 타이밍에 대한 질문

0

84

2

강의 참고 내용을 개발 로그로 작성해도 될지 문의드립니다.

0

133

2

customAuthentication 관련

0

127

2

authenticationManagerBuilder 주입받은거 vs 만든 거

0

110

1

UserDetailsService()에서 UserDetail이 아닌 타입을 반환할 수 있나요?

0

101

1

9:28 패턴 3의 경우 마지막으로 설정한 것만 적용되는 것 같습니다.

0

159

2