스프링 시큐리티 질문
-
게시물 수정 , 삭제는 로그인 필요
안녕하세요 이번에 프로젝트에서 JWT 로그인 부분을 맡게 되어서 스프링 시큐리티를 공부하며 프로젝트를 하고 있는 도중 문제가 생겨 질문합니다.
현재 문제점이
JWT 토큰을 발급하며 로그인을 한 후
로그인 한 상태로 게시판을 들어가면 그 게시판을 불러오지 못합니다.
에러 메세지는 Authority(권한)이 null이여서 불러오지 못한다고 하는데,
제가 만드는 사이트는 지금 관리자 개념이 필요가 없고 로그인 한 사용자만 필요해서
Role을 설정을 안했는데 그래서 에러가 발생하는건가요??
Security Config 파일입니다.
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
//AuthenticationManager가 인자로 받을 AuthenticationConfiguraion 객체 생성자 주입
private final AuthenticationConfiguration authenticationConfiguration;
private final JwtTokenProvider jwtTokenProvider;
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
return configuration.getAuthenticationManager();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// csrf disable => csrf protect disable
http
.csrf(AbstractHttpConfigurer::disable)
// form 로그인 방식 disable
.formLogin(AbstractHttpConfigurer::disable)
// http basic 인증 방식 disable
.httpBasic(AbstractHttpConfigurer::disable)
// 경로별 인가 작업 - 모든 경로 경로 인가 해줌
.authorizeHttpRequests((request) -> request.requestMatchers("/user/**").permitAll().requestMatchers("/algorithm/**").authenticated())
// user 경로를 통한 경로는 전부다 허용, algorithm 부분은 로그인을 해야지 들어갈 수 있음
// add at 은 원하는 자리에 등록
// add before은 해당하는 필터 이전에 등록
// add after는 이후에
.addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class)
// 필터를 등록한다. LoginFilter를 등록하는데 매개변수로 Manage가 들어가야한다. => bean 등록 필요
// 세션 설정
.sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
}
여기 보시면
.authorizeHttpRequests((request) -> request.requestMatchers("/user/**").
permitAll().requestMatchers("/algorithm/**").authenticated())
permitAll()을 통해 Role이 필요 없이 인가된 사용자만 algorithm 게시판을 불러올수 있게 하였는데
왜 작동이 안되는지를 모르겠습니다.
import lombok.Builder;
import lombok.Data;
import java.util.Date;
@Data
@Builder
public class UserDto {
private String userId;
private String password;
private String name;
private Date birth;
private String gender;
private String email;
private Date createdAt;
}
이건 UserDto입니다.
알려주시면 정말 감사합니다..
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
//AuthenticationManager가 인자로 받을 AuthenticationConfiguraion 객체 생성자 주입
private final AuthenticationConfiguration authenticationConfiguration;
private final JwtTokenProvider jwtTokenProvider;
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
return configuration.getAuthenticationManager();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// csrf disable => csrf protect disable
http
.csrf(AbstractHttpConfigurer::disable)
// form 로그인 방식 disable
.formLogin(AbstractHttpConfigurer::disable)
// http basic 인증 방식 disable
.httpBasic(AbstractHttpConfigurer::disable)
// 경로별 인가 작업 - 모든 경로 경로 인가 해줌
.authorizeHttpRequests((request) -> request.requestMatchers("/user/**").permitAll().requestMatchers("/algorithm/**").authenticated())
// user 경로를 통한 경로는 전부다 허용, algorithm 부분은 로그인을 해야지 들어갈 수 있음
// add at 은 원하는 자리에 등록
// add before은 해당하는 필터 이전에 등록
// add after는 이후에
.addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class)
// 필터를 등록한다. LoginFilter를 등록하는데 매개변수로 Manage가 들어가야한다. => bean 등록 필요
// 세션 설정
.sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
}
.authorizeHttpRequests((request) -> request.requestMatchers("/user/**").
permitAll().requestMatchers("/algorithm/**").authenticated())
import lombok.Builder;
import lombok.Data;
import java.util.Date;
@Data
@Builder
public class UserDto {
private String userId;
private String password;
private String name;
private Date birth;
private String gender;
private String email;
private Date createdAt;
}
#스프링 시큐리티 #스프링 시큐리티 로그인 #스프링 시큐리티 jwt #스프링 시큐리티 로그인 페이지 없애기 #스프링 시큐리티 쓰는 이유 #스프링 시큐리티 로그인 구현 #스프링 시큐리티 jwt 로그인 #스프링 시큐리티 로그아웃 #스프링 시큐리티 oauth2 #스프링 시큐리티 인 액션