-
Spring Security개발 2020. 4. 7. 15:33
role 권한 관리
ADMIN 이라는 권한 동시에 화면에 대한 접근 ROLE도 유지하고 싶었음
@Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/resource/**"); web.expressionHandler(new DefaultWebSecurityExpressionHandler() { @Override protected SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, FilterInvocation fi) { WebSecurityExpressionRoot root = (WebSecurityExpressionRoot) super.createSecurityExpressionRoot(authentication, fi); root.setDefaultRolePrefix(""); return root; } }); }
우선 "ROLE_" prefix 제거
로그인 할 때
spring security 가 미리 등록한 AdminAuthenticationProvider에서 사용자의 계정, 권한을 파악
나는 DB에서 들고 있던 ADMIN 권한 외에 화면 권한이 필요했으므로 같이 넣어준다.
// TODO 권한 추가 (userInfo == UserDetails) List<GrantedAuthority> authorities = (List<GrantedAuthority>) userInfo.getAuthorities(); authorityService.getUserRole(Role.valueOf(userInfo.getAuthority())).forEach(x -> { authorities.add(new SimpleGrantedAuthority(x.getRoleGroup().name())); });
Security에서 계정을 검증하고 필요한 정보들을 인증 토큰에 저장한 뒤 로그인 url 로 이동한다.
여기서 사용자 정보를 다시 조회 후 넘어간다.
다른 권한들과 url 맵핑 부분에서 자꾸 오류가 발생...
.antMatchers("/setting**", "/v1/setting/**").hasRole("SETTING")
/setting/** url이 모든걸 막아버린다.
위에서 설정한 defaultPrefix는 다시 삭제하고
권한 추가 부분에서 role을 부여할 때 prefix를 붙여주니 url 분리가 제대로 동작했다.
로그인 서비스 - security 자체 서비스 호출 - 인증 매니저에서 검증 - 로그인 완료
'개발' 카테고리의 다른 글
git start (0) 2020.05.28 npm install ERROR (0) 2020.05.28 Ubuntu 서버 외부 접근 시 화면이 노출안된다면 (0) 2020.05.20 언어 변경할 때마다 경고 tiles 발생 (0) 2020.04.02 전개 구문 (0) 2020.03.27