ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.