스프링시큐리티를 공부하던 도중 책에서 이런 코드가 있었다.
SecutiryConfig 구성 클래스 안에서 configure를 orverride 하는 코드이다.
.hasRole() 을 호출할 때 ROLE_USER 로 설정하는것.
그리고 이는 밑의 코드와 동일하게 돌아간다고
하지만 막상 돌려보면 ?
??????
오류를 찾아봤더니 친절하게 설명을 해준다.
ROLE_ 은 자동생성해주니깐 prefix의 ROLE_ 을 쓰지말라고 ..
hasRole()의 내부는 이렇게 생겨먹었다.
저 rolePrefix는 자동으로 ROLE_ 이라는 prefix를 붙여주기 때문에 ROLE_ 이라는 prefix를 제외한 권한을 적으라는 것이다.
여기서 ROLE_ 이라는 prefix를 자동으로 붙여준다. 별도의 설정을 하지 않는 이상
따라서 다음과 같이 바꿔준다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/design", "/orders")
.hasRole("USER")
.antMatchers("/", "/**").permitAll()
.and()
.formLogin()
.loginPage("/login")
// .defaultSuccessUrl("/design",true)
.and()
.logout()
.logoutSuccessUrl("/")
.and()
.csrf().disable();
}
그런데 만약 내가 prefix를 따로 설정 해놨다면 ?
getAuthorities에서 설정한 prefix를 따온다.
@Entity
@Data
@NoArgsConstructor(access=AccessLevel.PUBLIC, force=true)
@RequiredArgsConstructor
public class User implements UserDetails {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private final String username;
private final String password;
private final String fullname;
private final String street;
private final String city;
private final String state;
private final String zip;
private final String phoneNumber;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"));
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
'Backend > Spring' 카테고리의 다른 글
[Spring] YML 한번 알고 가기 (1) | 2022.06.07 |
---|---|
[SpringSecurity] 스프링 시큐리티 구성하기 (0) | 2022.06.07 |
[Spring] 폼 유효성(validation) 검사하기 (0) | 2022.05.24 |
Spring 구조와 Component (0) | 2022.05.07 |
부트스트랩 css 적용 안될 때 해결법 (0) | 2022.02.25 |