묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Editor....를 활용한 패턴에 질문있습니다.
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.Editor관련한 질문글들을 읽어보아도 제 머리로 이해가 안돼서 또 이렇게 Editor 질문 글을 하나 더 추가합니다... ㅠㅠ [해당 영상을 보지 않았더라면 짰을 코드]Post엔티티에 비즈니스 로직을 작성하고단순하게 PostEdit을 전부 넘겨 비즈니스 로직 change를 호출하여 더티체킹으로 마무리! 이렇게 했을 경우, 파라미터 순서에 무관하게 PostEdit이라는 수정을 위한 Dto 객체를 단 하나만 넘겨 수정을 할 수 있다고 판단했습니다. 물론 위 비즈니스 로직은 null값에 대처는 못하겠지만요! 하지만, 프론트 개발자와 상의하여 '수정 시, 모든 데이터를 넘겨준다는 전제' 에서는 가장 간단한 방법이라고 생각했습니다! [Editor를 작성해보며 느낀 의문점]Post의 toEdit을 통해 기존 가지고 있던 데이터를 PostEditor에게 넘김으로써 Builder에서 null값에 대응할 수 있다는 점 이외에는 또 다른 장점을 이해하지 못하고 있습니다. Request의 title혹은 content가 null일 경우 이를 해결하기 위한 방법을 제시해주는 것 말고는 되려 관리해야 할 것들만 늘어난 느낌이 해소가 되지 않습니다 ㅠㅠ 그래서 제가 이해한 것 까지의 내용들이 잘 이해한 것인지 그리고 추가적으로 제가 이해하지 못한 것들을 이해하고 싶습니다! findById로 수정하려는 엔티티를 가져옵니다.toEdit()을 통해 현재 수정하고자 하는 엔티티의 필드들을 PostEditor에게 넘겨 빌더를 만듭니다. 이는 수정하려는 엔티티가 현재 가지고 있는 필드들을 핸들링 할 수 있도록 해줍니다. (가령, title혹은 content의 null 처리)2번을 통해서 PostEditor가 현재 수정하려는 Post의 필드들을 주입 받았으면, Request로 받은 데이터를 통해 최종 build()를 해줍니다.변경사항을 모두 적용한 postEditor를 Post의 변경비즈니스 메서드 edit(postEditor)를 통해 더티체킹으로 변경해줍니다. [최종적으로 든 생각][Editor를 작성해보며 느낀 의문점] 에서 작성된 것들이 정확하다면,아예 첫 방법을 사용하되, 비즈니스 메서드에서 null 체크를 해주면 어떨까? 하는 생각이 들었습니다.이런 방식으로 진행한다면 문제가 있을까요? 긴 글에 시간 내어주셔서 감사합니다 !
-
미해결스프링 시큐리티
강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..
안녕하세요 강사님스프링 시큐리티 완전 정복 [6.x 개정판]를 애타게 기다리고 있는 수강생입니다..다름이 아니라 스프링과 시큐리티 버전업해서 미리 해보고 있는데 form 로그인을 할 경우에는 쿠키가 자동으로 생성되는데ajax로 로그인할 경우에는 session 로그인 처리는 되나 쿠키가 생성되지를 않습니다..정말 모르겠습니다....제발 부탁드리겠습니다..ㅠㅠ감사합니다.. https://github.com/KMSKang/springboot-jpa-board
-
미해결스프링 시큐리티
403 에러 뜹니다.
POST http://localhost:8080/api/loginHTTP/1.1 403Vary: OriginVary: Access-Control-Request-MethodVary: Access-Control-Request-HeadersX-Content-Type-Options: nosniffX-XSS-Protection: 0Cache-Control: no-cache, no-store, max-age=0, must-revalidatePragma: no-cacheExpires: 0X-Frame-Options: DENYContent-Length: 0Date: Wed, 28 Feb 2024 07:00:26 GMTKeep-Alive: timeout=60Connection: keep-alive<Response body is empty>Response code: 403; Time: 3ms (3 ms); Content length: 0 bytes (0 B)Cookies are preserved between requests:> C:\Users\JOSOYA\IdeaProjects\corespringsecurityfinal-master\core-spring-security\.idea\httpRequests\http-client.cookies 필터체인이 다중처리가 안되는걸로 확인됩니다..ㅠ ajaxAuthenticationProvider 도 타지 않고 403 에러만 나오네요..csrf 도 disabled 했습니다.왜 403 뜨는지 찾아봐도 모르겠습니다..ㅠㅠ도와주시면 감사하겠습니다!!깃 주소 입니다.https://github.com/soyajo/core-spring-security.git
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
프로젝트 생성시 Srping MVC Project 없음
안녕하세요 선생님.전자정부프레임워크 4.0 다운받고,스프링 레거시 -> Spring MVC Project 하려고하는데보이지가 않습니다... Template Project에서 spring-defaults 제외하고 나머지도 다 지워봤는데 계속 안나오고,혹시 몰라서 자바 버전도 변경해봤는데 안나옵니다.. 혹시 어떻게 해야할까요?
-
미해결스프링부트 시큐리티 & JWT 강의
안녕하세요 ! 질문이 있습니다.
강사님의 강의를 통해 Jwt 와 시큐리티에 대한 공부를 수월히 할 수 있었습니다.근데 개인적으로 이제 실습하면서 문제가 발생해서 자문을 구하고자 글을 쓰게 되었습니다. 로그인이 성공하면 토큰을 로컬 스토리지에 담고, 요청할 때는 토큰을 꺼내어 헤더에 담아서 검증절차를 진행하려고 합니다. 근데 분명 위의 프로세스에 해당 하는 로직을 작성하였다고 생각하였는데, 의도한 대로 흘러가지가 않아서 매우 난처한 상황입니다. Index.html<script> $(document).ready(function() { // 로그아웃 버튼 이벤트 $('#logoutButton').click(function() { // 로컬 스토리지에서 토큰 제거 localStorage.removeItem('accessToken'); // 로그인 페이지로 리다이렉션 window.location.href = '/login'; }); // 테스트 버튼 이벤트 $('#testButton').click(function() { // 로컬 스토리지에서 토큰 가져오기 const token = localStorage.getItem('accessToken'); if (token) { $.ajax({ url: '/api/test', // 요청할 서버의 URL type: 'GET', // HTTP 메서드 beforeSend: function(xhr) { // 요청 헤더에 토큰 추가 xhr.setRequestHeader('Authorization', token); }, success: function(data) { // 요청 성공 시 로직 console.log("테스트 요청 성공:", data); alert("테스트 요청 성공"); }, error: function(xhr, status, error) { // 요청 실패 시 로직 console.error("테스트 요청 실패:", xhr.responseText); alert("테스트 요청 실패"); } }); } else { alert("토큰이 없습니다. 다시 로그인해주세요."); } }); }); </script> 이와 같이 /url/test 로 api 요청을 할때 헤더에 토큰을 담게 했습니다.이에 "테스트 버튼"을 누르게 되면 JwtAuthorizationFilter@Override protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) throws ServletException, IOException { // 헤더에서 토큰 추출 log.info("헤더에서 토큰 추출"); String tokenValue = jwtUtil.getJwtFromHeader(req); log.info("토큰 : " + tokenValue); if (StringUtils.hasText(tokenValue)) { // 토큰 유효성 검사 if (!jwtUtil.validateToken(tokenValue)) { log.info("Token Error"); return; } Claims info = jwtUtil.getUserInfoFromToken(tokenValue); try { setAuthentication(info.getSubject()); } catch (Exception e) { log.error(e.getMessage()); return; } } else { log.info("토큰이 없습니다."); } filterChain.doFilter(req, res); } // 인증 처리 public void setAuthentication(String loginId) { log.info("인증 성공"); SecurityContext context = SecurityContextHolder.createEmptyContext(); Authentication authentication = createAuthentication(loginId); context.setAuthentication(authentication); SecurityContextHolder.setContext(context); } // 인증 객체 생성 private Authentication createAuthentication(String loginId) { log.info("인증 객체 생성"); UserDetails userDetails = userDetailsService.loadUserByUsername(loginId); return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); } 로그로 토큰이 출력되는 것과 최종적으로 인증 객체 생성까지 되는 것을 확인했습니다.그러나 이렇게 인가 필터를 거치고 이제 컨트롤러로 접근하게 되면 @GetMapping("/api/test") public String testPage() { log.info("test controller"); return "test"; } 저기 test controller 라는 로그만 찍힌채 프로세스가 마무리됩니다. 최종로그2024-02-26T16:19:36.394+09:00 INFO 60592 --- [nio-8081-exec-9] JWT 검증 및 인가 : 토큰 : eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0NiIsImF1dGgiOiJPV05FUiIsImlhdCI6MTcwODkzMTk3MywiZXhwIjoxNzA4OTM1NTczfQ.A2AhGDg5phTcm4gGC-01K0jKoAGE1c5Ygsq9v_J1ntk 2024-02-26T16:19:36.426+09:00 INFO 60592 --- [nio-8081-exec-9] JWT 검증 및 인가 : 인증 성공 2024-02-26T16:19:36.427+09:00 INFO 60592 --- [nio-8081-exec-9] JWT 검증 및 인가 : 인증 객체 생성 Hibernate: /* <criteria> */ select u1_0.id, u1_0.email, u1_0.login_id, u1_0.password, u1_0.role from users u1_0 where u1_0.login_id=? 2024-02-26T16:19:36.434+09:00 INFO 60592 --- [nio-8081-exec-9] TestController : test controller 이때 웹 페이지의 개발자 도구를 열어서 콘솔로그를 확인 해보면, 제가 가지고 오고자 했던 test.html 의 코드만이 적혀있을 뿐입니다. 뭐가 문제인 걸까요.. 혹시나 test 쪽에 토큰을 가져오는 로직도 작성해봤습니다. Test.html<head> <meta charset="UTF-8"> <script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script> <script> $(document).ready(function () { const auth = getToken(); if (auth) { $.ajaxPrefilter(function (options, originalOptions, jqXHR) { jqXHR.setRequestHeader('Authorization', auth); }); } else { window.location.href = '/user/login-page'; } }); function getToken() { let auth = localStorage.getItem('accessToken'); return auth || ''; } </script> <title>Test Page</title> </head> <body> <h1>This is a test page.</h1> </body> </html> 그럼에도 여전히 해당 페이지에는 접근을 못하고 있습니다 ㅠㅠㅠㅠ제가 놓친 부분이 뭐가 있을지 조언을 주신다면 감사하겠습니다.
-
미해결스프링부트 시큐리티 & JWT 강의
안녕하세요! 질문있습니당!
11강 네이버 로그인까지 완료하고 @AuthenticationPrincipal을 이용해서 로그인한 정보를 가져오려고 하는데, 구글로 로그인했을 때는 정보가 출력되는데, 네이버로 로그인했을 때는 null로 나와서 구글링하며 찾아보았는데 해결이 안 되어서…. 질문 남깁니다.
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
idx, boardGroup 번호에 대해
idx는 1번부터 시작하고 boardGroup은 0번부터 시작하셨는데, boardGroup도 idx와 동일하게 1번부터 해도 상관없을까요? 관습적으로 0번부터 하는건지 다른 이유가 있는 건지 궁금합니다.
-
미해결스프링 시큐리티
login_proc의 존재에 대한 간략한 설명입니다
정답부터 말하면 내부적인 정상 처리를 위해 일치시켜줘야 합니다.이름이 logic_proc일 필요는 없고요 login 폼의 action이랑, 설정에서 등록해주는 loginProcessingUrl과 맞추기만 하면 됩니다. 저는 /login_perform으로 했는데요.사용자가 로그인 폼에서 아이디와 비밀번호를 입력하면 UsernamePasswordAuthenticationFilter에서 주된 처리를 하게 되잖아요. 본격적인 처리가 들어가기 전에 이 처리를 할지 말지는 요청 Url와 HttpMethod를 검사해야 합니다. 이게 맞아야 해당 요청에 대한 정확한 필터를 작동시키니까요.UsernamePasswordAuthenticationFilter의 실행 여부는 AbstractAuthenticationProcessingFilter가 합니다. doFilter에서 이뤄지죠? 다음 코드를 확인해봅시다.바로 requiresAuthentication 함수를 디버깅해봅시다.저matcher에 loginProcessingUrl에서 설정한 Url과 요청Url이 매치되는지 확인합니다. 해당 Url을 matcher에 설정할 때 시큐리티 내부적으로 POST를 이미 넣어줬습니다. 그렇기 때문에 로그인 폼에서 POST 방식을 지정하고 Action Url을 /login_perform 으로 설정하면 시큐리티에서 설정한 값과 동일하므로 이후의 로그인 절차가 진행될 수 있죠.조금 더 첨언하자면 커스텀 로그인을 하는 순간 로그아웃도 반드시 커스텀해줘야 합니다. 서버 구동 시 설정 쪽에 관련 코드가 있어요. 디폴트 로그인이 아니면 디폴드 로그아웃도 설정 안 한다. 그래서 커스텀 로그인을 하면 DefaultLogoutPageGeneratingFilter가 설정되지 않아요. 그래서 강사님이 /logout 컨트롤러를 생성하신 겁니다. 다시 결론: 로그인 기능을 커스텀할 때 로그인 폼의 action url와 시큐리티에서 loginProcessingUrl은 일치시켜주기만 하면 된다.
-
미해결스프링 시큐리티
top.html에 로그인 링크를 만들어서 로그인을 해봤습니다
안녕하세요.지금 개발환경은 스프링부트, 시큐리티 모두 최신 버전입니다.permitAll()로 static resource를 허용하고 싶은데요. 설정을 분리하니까 login 하고 나서 css 파일이 화면에 나타납니다. 로그인 버튼은 top.html에 링크를 추가했습니다.ignoring()을 쓰거나 설정을 통합하면 문제가 해결되긴 합니다. http.authorizeHttpRequests(registry -> registry .requestMatchers("/mypage").hasRole("USER") .requestMatchers("/messages").hasRole("MANAGER") .requestMatchers("/config").hasRole("ADMIN") .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .requestMatchers("/").permitAll() .anyRequest().authenticated());하지만 저는 설정을 두 개로 유지하면서, permitAll()을 써도 문제가 없었으면 하는데, 제가 아는 선에서는 방법을 찾기 어려워 질문드리게 됐습니다. @Order(0) @Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(registry -> registry .requestMatchers("/mypage").hasRole("USER") .requestMatchers("/messages").hasRole("MANAGER") .requestMatchers("/config").hasRole("ADMIN") .requestMatchers("/").permitAll() .anyRequest().authenticated()); http.formLogin(Customizer.withDefaults()); http.logout(config -> config.logoutSuccessUrl("/")); http.userDetailsService(userDetailsService); return http.build(); } @Order(1) @Bean SecurityFilterChain resource(HttpSecurity http) throws Exception { http.authorizeHttpRequests(registry -> registry .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .anyRequest().authenticated()); return http.build(); }감사합니다.
-
미해결스프링 시큐리티
안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!
안녕하세요!account_roles가 자동 생성되는데 실제로 존재하지 않는 account_id에 대한 데이터가 들어가있습니다. account 테이블에는 아무 값도 없습니다. 생성된 acount가 없는데 왜 이럴까요?..내용만 보면 role이 3개, 2개, 1개씩 들어가는 거 보니 (계층 구조 설정 안 되어 있음) admin 계정엔 3개를 다 넣고, manager엔 2개, user엔 1개 role을 넣어주는 것 같은데 문제는 account 테이블이 비어있다는 점입니다..ddl-auto: create로 되어 있고 InMemoryUserDetailsManager 이용해서 아무 데이터도 넣어주지 않았습니다. config에서 자원에 권한 부여하면서 resource 테이블이 만들어진 거 같은데 /mypage 경로에 대해서는 안 만들어지는 것 같습니다..이유를 알 수 있을까요?...requestMatchers("/mypage").hasRole("USER")
-
미해결스프링 시큐리티
안녕하세요. 익명 객체와 세션 관련 궁금증입니다.
실습환경스프링부트 3.2.2 기준 security 6.2.1질문안녕하세요.빠르게 두 번째 듣고 있습니다ㅋㅋㅋ첫 번째에는 강의 환경과 맞춰서 들었는데 아무래도 관련 지식이 부족한 채로 듣다 보니까, oauth2 한참 듣고 와서 인증인가 쪽 코드를 슥 보니 전혀 모르겠어서 다시 듣고 있어요ㅋㅋ질문은 다름이 아니라 지금은 최신 버전으로 듣고 있는데요. 처음에는 버전 차이인 줄 알았더니 아닌 것 같아서요. 익명사용자 인증필터 강의 PPT에서 "세션에 저장하지 않는다"라고 하셨는데 코드 따라가보니까 익명 객체도 세션 저장을 하더라고요. 생각해보면 로그인을 안 해도 브라우저에 session id를 내려주니까 서버에서 session을 유지하고 있어야 할 것 같긴 한데요..ExceptionTranslationFilter에서 sendStartAuthentication에서 엔트리포인트의 commence 함수를 바로 위에, this.requestCache.saveRequest(request, response)를 쭉 타고 가보면 Request.doGetSession()에서 session을 만들고 반환하는 부분이 있습니다.로그인 인증 이후에는 session id만 변경하는 로직이 있는 것도 익명 인증 때 이미 session이 존재한다는 걸 뒷받침하는 것 같습니다. 제가 틀린 부분이 있으면 가르침 부탁드립니다.
-
미해결스프링부트 시큐리티 & JWT 강의
OAuth로 Jwt 토큰 인증하기
강의를 모두 수강하였는데요! 한가지 추가적으로 더 배우고 싶은 부분이 있어서 질문 드립니다.다름이 아니라, 강의에서 Oauth 인증과 Jwt 토큰 인증을 따로 배웠습니다. Oauth2 같은 경우 sns인증을 받아 session을 사용하여 권한 처리가 되었는데, session 말고JWT를 사용해서 Oauth2 권한 처리하려면 어떻게 해야하는 지 알고 싶습니다. 강사님께서 다른 강의에서 다뤄 주시겠다고 하셨는데, 혹시 해당 강의를 들으려면 어디에서 수강할 수 있을 지 알고 싶습니다!
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
깃허브 주소를 못 찾겠어요
스프 2탄 깃허브 주소좀 부탁드립니다 ~
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
섹션9 vue
섹션9 시작할 때 vue 페이지를 깃헙에만 올려놓은 상태라고 하셨는데 참고해서 학습을 진행하고 싶은데 올려놓으신 깃헙 주소 좀 알려주실 수 있을까요?
-
미해결스프링부트 시큐리티 & JWT 강의
jwt를통해 로그인을할때 User가 null값이 되어오류납니다
java.lang.NullPointerException: Cannot invoke"filesource.project16.model.SiteUser.getPassword()" because "this.siteUser" is nullat filesource.project16.auth.PrincipalDetails.getPassword(PrincipalDetails.java:24) ~[main/:na] 로그인할때 db에있는 올바른 username, password를 입력하였는데 이런 오류가 뜨네요. jwt의 토큰을 거치면서 username, password 정보가 null값이 되어버리는거 같은데,보통 어디에 문제가있어서 이러는걸까요? auth, jwt 폴더의 파일은 수정하지않고 원본그대로 썼습니다. @EnableWebSecurity //모든 요청URL이 스프링 시큐리티의 제어를 받도록함. 기본 스프링 필터체인에 등록 @Configuration public class SecurityConfig { @Autowired private CorsConfig corsConfig; @Autowired private UserRepository userRepository; @Autowired private UserDetailsService userDetailsService; @Bean public SecurityFilterChain configure(HttpSecurity http) throws Exception { AuthenticationManagerBuilder sharedObject = http.getSharedObject(AuthenticationManagerBuilder.class); sharedObject.userDetailsService(userDetailsService); AuthenticationManager authenticationManager = sharedObject.build(); http.authenticationManager(authenticationManager); http .csrf(csrf -> csrf.disable()) .httpBasic(basic -> basic.disable()) .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .addFilter(corsConfig.corsFilter()) // cors 허용 설정 .addFilter(new JwtAuthenticationFilter(authenticationManager)) .addFilter(new JwtAuthorizationFilter(authenticationManager, userRepository)) .authorizeHttpRequests(requests -> requests .requestMatchers("/**").permitAll() //비로그인 접근가능페이지 .anyRequest().authenticated() //이상제외는 로그인필수 ) .formLogin(form -> form .loginPage("/login") //자동적으로 로그인페이지로감. 로그인페이지로 취급될주소 .defaultSuccessUrl("/main", true) //로그인 성공시 루트 url .permitAll() ) .logout(logout -> logout.permitAll()); return http.build(); } @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } }
-
미해결스프링 시큐리티
msa 구성시 SecurityContext 활용
안녕하세요! 현재 학습차 msa 구성으로 회원 가입/로그인/인증 부분을 만들어 보고 있습니다.auth-micro-service에서 인증하고 gateway 계층으로 인증 객체를 전송해서 SecurityContext에 인증 객체를 저장하려고 했는데 잘 안되고 문제가 발생합니다... 아무리 관련 내용을 검색해봐도 제가 부족한 탓인지 파악이 잘 안됩니다...일반적으로 msa에서 로그인한 회원 식별을 spring-security를 통해서 어떤 방식으로 구현하나요??현재 eureka-server, gateway-server, user-service, auth-service로 구성되어 있고, JWT를 통해 인증하고 있습니다! 회원 가입과 로그인 + 로그인시 AccessToken과 RefreshToken발급까진 했습니다. 로그인 인증은 UserDetailsService 의 loadUserByUsername(username: String) 을 사용하고 있습니다.
-
해결됨스프링 시큐리티
AjaxLoginAuthenticationEntryPoint 관련 질문입니다.
안녕하세요 강의 잘 듣고 있습니다!!저는 [스프링 부트 v3.1.3 , 스프링 시큐리티 6.2 버전]으로 강의를 듣고 구현해보고 있습니다!AjaxLoginAuthenticationEntryPoint(), ajaxAccessDeniedHandler()에서 계속 401 에러 [로그인이 안되어 있음]가 발생하여 해결 방안을 찾지 못하고 질문 올립니다.테스트 사진에서 admin() 버튼을 눌렀을 때, manager 권한으로 provider에서 잘 실행이 된 후, 곧이어 "/api/message.do" get 방식으로 호출한 상태를 나타냅니다. (결과 : 401 에러, 예측 값 : message ok가 되야함) 세션 쿠키도 잘 생성이 되고 있지만, 다시 /api/message.do으로 보낼때, AnonymousAuthenticationToken으로 넘어가고 있습니다... 어디선가 초기화가 되는 것일까요...? @Bean public SecurityFilterChain allfilterChain2(HttpSecurity http) throws Exception { http.csrf(csrf ->csrf.disable()) .securityMatcher("/api/**") .authorizeHttpRequests(request -> request .dispatcherTypeMatchers(DispatcherType.FORWARD).permitAll() // 맨 처음 .requestMatchers(new AntPathRequestMatcher("/api/login")).permitAll() //여기 경로만 탈때 ajaxSecuriyConfig가 작동을 하게 되는 것이다. .requestMatchers(new AntPathRequestMatcher("/api/messages.do")).hasRole("MANAGER") .anyRequest().authenticated() // 어떠한 요청이라도 인증필요 ) .exceptionHandling(handling ->handling .accessDeniedHandler(ajaxAccessDeniedHandler()) .authenticationEntryPoint(new AjaxLoginAuthenticationEntryPoint()) ) .addFilterBefore(ajaxLoginProcessingFilter(authenticationManager(http)), UsernamePasswordAuthenticationFilter.class); ; return http.build(); } function getMessege() { $.ajax({ url: '/api/messages.do', type: 'get', dataType: 'json', contentType: "application/json", data: {}, success: function(res){ // ajax 통신 성공시 호출 console.log(res); }, error: function(xhr, status, error) { // 요청이 실패했을 때 실행될 콜백 함수 console.log('Error:', xhr.responseText); } }); } function admin() { $.ajax({ url: '/api/login', type: 'post', dataType: 'json', contentType: "application/json", data: JSON.stringify({ user_name : "manager", password : "1234rf" }), success: function(res){ // ajax 통신 성공시 호출 console.log(res); getMessege(); }, error: function(xhr, status, error) { console.error('Error:', xhr.responseText); } }); }
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
43강 age 0오류
0오류는 Memeber 를 정의할때 Int age; 말고 null타입이 들어갈 수 있는 Integer 타입으로 정의하면 되지않을까 제안드리는데 , 굳이 0으로 할 필요가 있을까요 ? Integer age ; 시 기본값이 null 이니깐 문제없지 않을까요
-
미해결[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기
Next Lv 강의에 대해서 계획중이신게 있을까요?
LDAP나 OAuth2는 다른거하고 연동하는거니까 패스하고.. Method Security(PreAuthorize, PostFilter, etc...)Role HierarchyLow Level Security(privileges) - Read, Write, Update, Delete등등 이런 고급 시큐리티쪽이요!
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
Controller의 BoardMapper 쪽에서 문제가 있습니다.
Controller에서 @Autowired로 private BoardMapper boardMapper를 해주었는데 필드 주입이 되지 않습니다.root-context에서 <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> <constructor-arg ref="mysqlHikariConfig" /> </bean> <mybatis-spring:scan base-package="com.spring.board.mapper" /> <bean class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> </bean>mybatis-spring:scan 으로 패키지에 제대로 설정해주었는데 "/boardList.do"로 이동하면 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.spring.board.mapper.BoardMapper.getLists이러한 에러가 콘솔창에 나타납니다.