묻고 답해요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
@AuthenticationPrincipal null 현상 해결이 되지 않습니다 .. ㅠㅠ
Filter 처리 후 SecurityContextHolder에 주입그 후 컨트롤러에서 @AuthenticationPrincipal 로 가져올 시 null 현상이 일어납니다.컨트롤러 단에서 SecurityContextHolder 에서 꺼내서 Principal 가져올 시 존재하는데 어노테이션을 통하여 사용하려고 하니 null 이 뜨네요.. 혹시 무언가 잘못된 부분이 있을까요 ..?Security 인증은 따로 사용하지 않고 있습니다.Spring Cloud Gateway ->모듈 Fileter -> Controller 로 사용중입니다.SCG에서 토큰 검증 후 uid를 모듈로 넘겨준 후 공통으로 사용하기 위해 AuthenticationPrincipal를 사용하려 합니다.FIlterTokenProviderTest ControllerUser Entity UserDetails Override
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
Security WebSecurityConfigurerAdapter Deprecated Issue
WebSecurityConfigurerAdapter가 Deprecated 되었으니 SecurityFilterChain를 Bean으로 등록해서 사용해야 할 거 같네요~~ https://devlog-wjdrbs96.tistory.com/434
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Spring Security vs ArugmentResovler
안녕하세요. 전에는 Spring Security 로 인증처리를 했는데 ArugmentResovler로와 큰 차이점이 있을까요? 구글링을 해봐도 정확한 차이를 잘 모르겠네요. 간단하게 쓸 때는 ArugmentResovler를 사용하는 건가요?
-
미해결스프링 시큐리티
본인글 삭제 아래 질문 이어서..
안녕하세요. 댓글로 다시 질문드렸는데 못보시는것 같아서 한번 더 질문드립니다. 인증을 받은 상태라서 로그인 유저 정보를 가져오는데는 어려움이 없습니다. 그럼 작성한 게시글의 작성자 id는 어떻게 가져오는가가 문제입니다. @PreAuthorize("isAuthenticated() and (( #board.createdBy == principal.userId ) or hasRole('ROLE_ADMIN'))") @RequestMapping( value = "/{id}", method = RequestMethod.PUT) public ResponseEntity<Message> updateUser(Board board, @Pathvariable String id){ messageService.updateMessage(id); return new ResponseEntity<Message>( new Message("수정성공"), HttpStatus.OK ); } 구글링을 해보니 바디에 삭제 혹은 수정할 글의 정보를 담아서 위 코드와 같이 요청을 보내더라구요.. 그럼 의미가 없는게 아닌가 싶습니다. 해당 글쓴이의 id(pk)를 제 id와 같게 담아서 보내면 삭제할수 있는 권한만 있으면 다른 글도 삭제 혹은 수정이 되지 않는가? 라는 생각이 들더라구요.. 제가 이상하게 생각하는건가요??ㅎㅎ;;
-
미해결스프링 시큐리티
spring sercurity를 통해서 특정 행위 허용
안녕하세요. 강사님 좋은 강의해주셔서 감사합니다. 제가 시큐리티에 jwt를 사용해서 rest api 를 개발중인데요.제가 강의를 아직 덜 보았지만 DB를 통해서 권한 관리하는 방법을 사용중입니다..아래 처럼 사용중입니다. 개발중 문제가 하나 있는데 게시판 같은 글을 삭제 할때 보통 해당 url과 method까지 추가해서 권한을 부여 하고있거든요. 예를 들어 /api/posts/*, DELETE를 추가하고 권한은 ROLE_ADMIN, 과 ROLE_USER를 설정 했습니다. 그럼 해당 url의 method는 권한을 체크하여 허용하거나 불허 합니다. 다만 이 글이 작성자 혹은 관리자만 삭제 할수 있어야 하는데 매번 컨트롤러에서 유저 체크하고 권한 체크하는 코드를 넣어줘야 하는가 궁금증이 생겨 찾아보니 인터셉터에서 url과 method 를 체크하는 벙법이 있었고 아래 처럼 다른 분의 질문에 이런식으로 예시를 들어주셨더라구요. 그런데 아래 메소드의 파라미터의 user는 로그인한 user객체일텐데 제가 지우거나 수정 해야 할 글의 생정자id는 어떻게 가져와 비교를 하시는건가요? @PeAuthorize에 있는걸로는 잘 이해가 안되더라구요. rest api로 개발 하다보니 url은 /api/posts/1 과 같이 게시글 id만 보내는 상황입니다., 답변 부탁드리겠습니다. 감사합니다. // 로그인한 사용자이고 본인인 경우나 혹은 전체 관리자인 경우 수정 메서드가 실행되고 그렇지 않을 경우엔// 403 에러 발생함@PreAuthorize("isAuthenticated() and (( #user.name == principal.name ) or hasRole('ROLE_ADMIN'))")@RequestMapping( value = "", method = RequestMethod.PUT)public ResponseEntity<Message> updateUser(User user ){ messageService.updateMessage( "메시지 저장"); return new ResponseEntity<Message>( new Message("수정성공"), HttpStatus.OK );}
-
미해결스프링 시큐리티
Spring security test 수행시 @AuthenticationPrincipal 가 null 로 세팅됨
안녕하세요 아래와 같이 Controller, 테스트 코드를 작성했습니다. 어플리케이션을 수행하고 로그인했을때는 정상적으로 사용자 정보가 출력이 되는데요 아래와 같이 테스트 코드를 수행했을때는 @AuthenticationPrincipal user 가 null 로 매핑이 됩니다. 해결 방법이 있을까요? @GetMapping(path="test") public String index(@AuthenticationPrincipal UserAccount user) { log.info(user.getUser()); return "/index"; } @Test public void index() throws Exception { // Given, When, Then mockMvc.perform(get("/test") .with(user("user").password("pwd").roles("USER"))) .andExpect(status().isOk()) .andExpect(authenticated()) ; }
-
미해결스프링 시큐리티
Spring security Multi 인증 문의드려요
강사님 안녕하세요 하나의 어플리케이션으로 관리자/사용자 형태로 구분해서 Spring security 세팅 하려고 합니다. 크게는 관리자와 사용자 2개의 인증을 별도로 태우려고 해요 - entity : User , Admin - UserDetailsService : UserService, AdminService - WebSecurityConfigurerAdapter - UserSecurityConf : - 우선순위 낮음 - /user/** 요청만 검증, - /user/login : 로그인 페이지 - AdminSecurityConf - 우선순위높음 - /admin/** 요청만 검증 - /admin/login : 로그인 페이지 대부분 원하는대로 동작이 되지만 세션을 같이 써서 문제가 발생하는것 같습니다. 예를 들어 user 로 정상 로그인 후에 admin 계정으로 로그인하게 될대 403 Forbidden 에러가 발생하네요 세션을 구분해서 관리할수 있는 방법이 있을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요! 질문있습니다.
안녕하세요. 좋은 강의 감사드립니다 :) 강의 19:23초경에 엔드포인트를 /health_check로 두고 get 요청을 날리셨는데, user-service의 WebSecurity에서 권한을 막아놓은 요청아닌가요? 어떻게 access denied가 발생하지 않았는지 궁금합니다.
-
미해결스프링 시큐리티
수업 내용은 아니지만 Security 관련 질문요청드립니다!
안녕하세요! 좋은 강의 해주셔서 감사드립니다! 다름이아니라 리액트+스프링부트+스프링시큐리티 환경에서 로그인api 연동중에 CORS 이슈가 발생하여 구글링을 계속하였지만 결국 문제점을 해결하지 못하였습니다.. 죄송스럽지만 이렇게 질문 요청드립니다!! 질문요청드릴 내용은 스프링 시큐리티에서 CORS 설정 부분입니다. 우선 제가 적용한 코드는 아래와 같습니다! @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public CorsConfigurationSource corsConfigurationSource(){ CorsConfiguration configuration = new CorsConfiguration(); configuration.addAllowedOriginPattern("*"); configuration.setAllowedMethods(Arrays.asList("*")); configuration.setAllowedHeaders(Arrays.asList("*")); configuration.setAllowCredentials(true); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", configuration); return source; } @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .cors().and() .authorizeRequests() .antMatchers("/","/api/register","/api/login","/h2-console/**","/api/email","/api/verify","/api/matching/**").permitAll(); http.addFilterBefore(loginProcessingFilter(), UsernamePasswordAuthenticationFilter.class); //ajax 인증방식 사용 http.headers().frameOptions().disable(); //h2 console 접근 } } 이후 talend API Tester를 이용해서 api 테스트를 해본 결과 GET방식에는 문제가 없었으나 POST방식에서 403 에러 가 발생하였고 확인해본결과 preflight 요청에 대한 응답을 보내지못하는 문제로 판단되었습니다. 문제점을 해결하기 위해 configure 메소드에 아래와 같이 preflight 요청을 허가하는 코드를 작성 해보았지만 결과는 동일 하였으며 http.authorizeRequests() .requestMatchers(CorsUtils::isPreFlightRequest).permitAll( 스프링부트에서 configuration.allowCredentials(true) 와 configuration.allowedOrigins("*") 는 동시에 설정 못하도록 하였다고 해서 configuration.allowCredentials(true) 대신 .allowedOriginPatterns("*") 으로 변경해보았지만 역시 결과는 동일했습니다. 추가로 fliter의 순서가 문제인것같아 Filter를 상속받는 CORSFilter를 만들어서 적용해보았지만 결과는 동일 하였습니다. (해당부분은 https://sas-study.tistory.com/298 이 블로그를 참조했습니다.) 현재 어느 부분에서 해결점을 찾아야 할지 갈피를 못집고 있는 상황이라 이렇게 질문 요청드립니다..ㅜㅜ 답변해주시면 정말 감사드리겠습니다!