본문 바로가기
Project/MangoPlate Clone

SpringSecurity 및 jwt 설정 1

by 혀눅짱 2023. 2. 27.

이제 슬슬 인증에 필요한 설정도 해야되서 인프런에 무료인강이 있길래 참고했다

 

먼저 이제 인증에 필요한 회원(User)테이블과 매핑할 도메인도 필요하니께 만들어주었다.

 

@Entity
@Getter
@NoArgsConstructor
public class User extends  BaseEntity{

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long userId;

    private String fullName;

    private String password;

    private String email;

    private String address;

    private String profileUrl;

    private String accessToken;

    private String roles;

    public List<String> getRoleList(){
        if(this.roles.length() > 0){
            return Arrays.asList(this.roles.split(","));
        }
        return new ArrayList<>();
    }

}

roles 같은경우 데이터 값이 USER,ADMIN 이런식으로 들어가도록 하려고해서 가져온담에 스플릿으로 리스트화 시키려고 getRoleList 메소드를 생성했다.

컬럼은 변동사항이 생길가능성이 많아서 일단 스킵

 

그다음 Security사용을 위해 라이브러리를 build.gradle에 추가한다.

 

implementation 'org.springframework.boot:spring-boot-starter-security'
@Configuration
public class CorsWebConfig implements WebMvcConfigurer {

    @Bean
    public CorsFilter corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**",config);
        return  new CorsFilter(source);
    }
}

그다음 예전에 해두었던 cors설정을 수정하였다.

시큐리티에서 필터를 등록하여 인증이 있던없던 그냥 모두 필터를거쳐서 다 허용하도록 CorsFilter를 빈으로 등록하였고 이전 로직은 제거했다.

 

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final CorsFilter corsFilter;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf()
                .disable()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .addFilter(corsFilter)
                .formLogin().disable()
                .httpBasic().disable()
                .authorizeRequests()
                .antMatchers("/user/**").access("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')")
                .anyRequest().permitAll();
    }
}

여기가 좀 중요한데 일단 api 통신이기때문에 session을 쓰지않겠다고 명시하였고 폼로그인도 역시 필요가없다

Http basic : Auth 기반으로 로그인 인증창이 뜸.  기본 인증 로그인을 이용하지 않으니 이것도 비활성화해준다

마지막으로 일단 인증관련로직은 /user라는 path를 주는것으로 가정하고 이것들을 제외하면 다 요청을 허용해주는것으로 설정하였다.

그후 직전 만들어뒀던 cors필터를 등록한다.

 

security로 간단한 인증은 해본경험이있어서 이정도까진 이해가가는데 jwt가 적용되면서 부터좀 복잡해질거같다. 끝

'Project > MangoPlate Clone' 카테고리의 다른 글

Jwt 토큰 예외처리  (0) 2023.03.09
Jwt 기본 세팅  (0) 2023.03.03
리뷰 및 메뉴 페이징 목록 구현  (1) 2023.02.27
EhCache 설정  (0) 2023.02.24
JPA Auditing 설정  (0) 2023.02.24