묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
새로고침해야만 등록한 글이 리스트에 뜹니다.
게시글 입력후 새로고침 해야만 새로 등록한 게시글이 리스트에 뜹니다. 제가 놓친 코드가 있을까요? 아니면 브라우저 문제일까요? (문제 상황 gif 이미지 첨부합니다) <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@page isELIgnored="false" %> <!DOCTYPE html> <html lang="en"> <head> <title>Spring MVC02</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> <script type="text/javascript"> $(document).ready(function () { loadList(); }); function loadList() { //서버와 통신 : 게시판 리스트 가져오기 $.ajax({ url: "boardList.do", type: "get", dataType: "json", success: makeView, error: function () { alert("error"); } }); } function makeView(data) { //콜백 함수 : 서버에서 응답으로 받은 데이터를 처리하는 함수 var listHtml = "<table class='table table-bordered'>" listHtml += "<tr>"; listHtml += "<td>번호</td>"; listHtml += "<td>제목</td>"; listHtml += "<td>작성자</td>"; listHtml += "<td>작성일</td>"; listHtml += "<td>조회수</td>"; listHtml += "</tr>"; $.each(data, function (index, obj) { listHtml += "<tr>"; listHtml += "<td>" + obj.idx + "</td>"; listHtml += "<td>" + obj.title + "</td>"; listHtml += "<td>" + obj.writer + "</td>"; listHtml += "<td>" + obj.indate + "</td>"; listHtml += "<td>" + obj.count + "</td>"; listHtml += "</tr>"; }); listHtml += "<tr>"; listHtml += "<td colspan='5'>"; listHtml += "<button class='btn btn-primary btn-sm' onclick='goForm()'>글쓰기</button>"; listHtml += "</td>"; listHtml += "</tr>"; listHtml += "</table>"; $("#view").html(listHtml); //view라는 id를 가진 div에 listHTML을 출력 $("#view").css("display", "block"); $("#wform").css("display", "none"); } function goForm() { $("#view").css("display", "none"); //숨기기 $("#wform").css("display", "block"); //보이기 } function goList() { $("#view").css("display", "block"); $("#wform").css("display", "none"); } function goInsert() { // var title = $("#title").val(); // #title에서 사용자가 입력한 value를 가져옴 // var content = $("#content").val(); // var writer = $("#writer").val(); var fData = $("#frm").serialize(); //form에 입력된 모든 데이터를 가져옴 // alert(fData); $.ajax({ url: "boardInsert.do", type: "post", data: fData, success: loadList, error: function () {alert("error");} }); } </script> </head> <body> <div class="container"> <h2>Panel Heading</h2> <div class="panel panel-default"> <div class="panel-heading">Spring MVC 02</div> <div class="panel-body" id="view">Panel Content</div> <div class="panel-body" id="wform" style="display: none"> <form id="frm"> <table class="table"> <tr> <td>제목</td> <td><input type="text" id="window-title" name="title" class="form-control"></td> </tr> <tr> <td>내용</td> <td><textarea type="textarea" rows="7" id="content" name="content" class="form-control"></textarea></td> </tr> <tr> <td>작성자</td> <td><input type="text" id="writer" name="writer" class="form-control"></td> </tr> <tr> <td colspan="2" align="center"> <button type="submit" class="btn btn-success btn-sm" onclick="goInsert()">등록</button> <button type="reset" class="btn btn-warning btn-sm">취소</button> <button type="button" class="btn btn-info btn-sm" onclick="goList()">리스트</button> </td> </tr> </table> </form> </div> <div class="panel-footer">인프런_스프1탄_박매일</div> </div> </div> </body> </html> @RequestMapping("/boardInsert.do") public @ResponseBody void boardInsert(Board vo) { boardMapper.boardInsert(vo); }
-
미해결스프링 시큐리티
메소드 로직에 대해 질문드립니다.
SecurityResourceService클래스에서 getResourceList()에서 이렇게 수정 되어야 하지 않나요?? 왜냐하면 configAttributeList에 권한 정보를 다 넣고 나서 result변수에 키 값인 자원과 value인 configAttributeList가 들어가야 할 것 같아서요. 강의 대로라면 1가지 자원에 여러가지 권한이 들어갈 수 있지만, 강의에서 나오는 코드 대로라면 1가지 자원에 1가지 권한밖에 들어가지 않을 것 같아서 질문드려보았습니다.
-
미해결스프링 시큐리티
질문 2가지 드립니다.
첫번째 질문입니다.SecurityResourceService클래스에서 ResourcesRepository를 주입받기위한 방법은 3가지가 있는것으로 알고있습니다.첫째, 생성자 주입둘째, @Autowired주입셋째, setter주입여기서 왜 setter주입방식을 사용하였는지 궁금합니다. setter주입방식은 찾아보니 별로 안좋다는 말이 있어서 질문드려보았습니다.이 주입방식을 생성자 주입방식 혹은 @Autowired로 변경하여도 상관없는거죠?? 두번째 질문입니다.SecurityResourceService클래스에서 getResourceList()에서 이렇게 수정 되어야 하지 않나요?? 왜냐하면 configAttributeList에 권한 정보를 다 넣고 나서 result변수에 키 값인 자원과 value인 configAttributeList가 들어가야 할 것 같아서요. 강의 대로라면 1가지 자원에 여러가지 권한이 들어갈 수 있지만, 강의에서 나오는 코드 대로라면 1가지 자원에 1가지 권한밖에 들어가지 않을 것 같아서 질문드려보았습니다.
-
미해결스프링부트 시큐리티 & JWT 강의
공개키와 개인키에 대한 질문이 있어 남겨봅니다.
A가 B에게 메시지를 보낼 때, B의 공개키로 1차 암호화를 하고 A의 개인키로 2차 암호화를 한다 하였는데, 개인키는 본인만 알고 있어야하는데 이걸로 암호화를 하면 다른 사람도 A의 개인키를 알게 되지 않나요? 물론 보안 파트가 어렵고 커서 간단하게 설명해주신 것 같지만 개인키가 밖으로 노출되게 개인키로 암호화한다는 것이 이해가 되지 않네요.. 키가 주기적으로 갱신된다거나 암호화 개인키와 복호화 개인키가 따로 있다거나 그런 건가요? 추가적인 설명 답변주시면 정말 감사하겠습니다. 좋은 강의 감사합니다.
-
미해결스프링부트 시큐리티 & JWT 강의
쿠키와 세션에 대해 궁금한 부분 있습니다.
유용한 강의 잘 듣고 있습니다. 감사합니다.강의 내용을 듣다가 쿠키와 세션이 헷갈려서 제가 이해한 내용대로 정리했는데, 확인해주실 수 있나요?쿠키와 세션에는 각각 name과 value 필드가 있는데, 쿠키의 value는 세션의 name이 된다. 강의 중 말씀하신 세션 ID '1234' 혹은 '겟인데어'인 세션 name 은 실제로는 유추할 수 없는 UUID의 값이 들어간다.클라이언트가 최초 요청 시에는 세션의 name인 UUID를 생성해 리턴해주고, 그 후 데이터 요청 시에는 쿠키 value를 받아 세션 name이 유효한지를 확인 후 맞으면 유저 정보가 담긴 세션의 value 값을 요청대로 처리한다.추가로 궁금한 건 쿠키의 name 은 자바의 필드처럼 value를 지칭하는 말이 들어가던데, 실제로는 어떤 값이 들어가나요? 정해진 게 있나요 아니면 개발자가 정하기 마음인가요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Permission targetId null
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세>> hasPermission targetId null문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.https://github.com/IE-MangChi/RepositoryForAsk.git영상에선 그냥 넘어갔지만 targetId값이 null로 찍히는게 맞는지 잘모르겠습니다.강의내용대로면 저값이 매핑되어야하는데, 공식홈페이지보니 아닌거 같아서 질문드립니다!
-
해결됨스프링 프레임워크는 내 손에 [스프1탄]
회원테이블과 권한테이블 간 관계
선생님 안녕하세요. 회원테이블과 권한테이블 간 관계 질문드립니다.회원 1명이 사용자, 매니저, 관리자 중 여러 권한을 가질 수 있으니, 회원테이블과 권한테이블 간 관계는 '1대다'의 관계인가요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
예외처리2 validation Map
Validation 클래스를 만들어서 Validation 클래스를 List로 담아서 내보냈습니다.이렇게 하면 테스트가 정상적으로 동작을 하는데 Map을 사용했을 때 성능적으로나 효율성이 뭐가 더 나은지 알고 싶습니다.그리고 json 을 어떤 방식으로 넘겨야 좋은지 알고싶습니다.
-
미해결스프링 시큐리티
브레이크 포인트를 거는 이유
브레이크 포인트를 거는 이유가 뭔가요 ??
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
스프링 시큐리티 질문
package kr.bit.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration //스프링 컨테이너 설정파일이라고 메모리에 올림 @EnableWebSecurity public class SecurityConfiguration { @Autowired private UserDetailsServiceImpl userDetailsService; //패스워드 인코딩 객체를 스프링 컨테이너에 등록 @Bean public PasswordEncoder PasswordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(csrfConfig -> csrfConfig.disable() ) .authorizeHttpRequests(authorizeRequests -> authorizeRequests .anyRequest().permitAll() ) .formLogin(login -> login .loginPage("/member/login") .defaultSuccessUrl("/board/list") ) .logout(logout -> logout .logoutUrl("/member/logout") .logoutSuccessUrl("/") ) .userDetailsService(userDetailsService); return http.build(); } } 모든 접근에 대해 permitAll()을 하면 http://localhost:8080/m15/http://localhost:8080/m15/member/login둘다 잘 접속 되지만package kr.bit.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration //스프링 컨테이너 설정파일이라고 메모리에 올림 @EnableWebSecurity public class SecurityConfiguration { @Autowired private UserDetailsServiceImpl userDetailsService; //패스워드 인코딩 객체를 스프링 컨테이너에 등록 @Bean public PasswordEncoder PasswordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(csrfConfig -> csrfConfig.disable() ) .authorizeHttpRequests(authorizeRequests -> authorizeRequests .requestMatchers("/", "/member/**").permitAll() .requestMatchers("/board/**").authenticated() ) .formLogin(login -> login .loginPage("/member/login") .defaultSuccessUrl("/board/list") ) .logout(logout -> logout .logoutUrl("/member/logout") .logoutSuccessUrl("/") ) .userDetailsService(userDetailsService); return http.build(); } } requestMatchers 로 permitAll()하면http://localhost:8080/m15/로 접속하면http://localhost:8080/m15/member/login로 이동하면서 에러가 발생합니다. 스프링 부트 버전은 3.2.1입니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
로그인을 Controller가 아닌 filter에서 처리하는 것의 이점
스프링 시큐리티에서 기본적으로 제공하는 formlogin 방식이 아닌 방식(예를 들면 json 요청)으로 로그인을 구현할 때, 기존의 방식 처럼 컨트롤러에서 처리하는 것과 커스텀 필터를 등록하여 처리하는 것에 차이가 무엇인지 궁금합니다. 아무래도 필터는 Dispatcher Servlet을 거치지 않고 먼저 처리할 수 있다는 장점이 있을 것 같은데 컨트롤로 단에서 처리하는 것 보다 어떤점이 유리할까요? 또 다른 이점이 있는지도 궁금합니다!
-
미해결스프링 시큐리티
csrf 문의
헤더에 토큰 값 주고 브레이크 포인트 잡았는데요..actualToken이 null 입니다ㅜㅜ 왜 그러는 걸까요?
-
미해결스프링부트 시큐리티 & JWT 강의
JWT - 24강 authenticationManager() 문제
jwt버전 문제로 안되는 것같아요..
-
미해결스프링부트 시큐리티 & JWT 강의
authenticaiotnMaanger()안됨
버전차이로 오류가 뜬것같습니다!..
-
미해결스프링 시큐리티
AjaxAuthenticationProvider에서 authenticate 함수 재정의 할 때 @Transactional 관련 질의입니다.
안녕하세요. 강의 잘 듣고 있습니다.제가 수강하는 시점엔 SpringBoot 3.x.x, security6를 써야 하지만, security5과 아키텍처는 대동소이할 거 같아 수업과 동일한 환경에서 강의 듣고 있습니다.강사님 영상에서 10:45 보시면 authenticate()에 @Transactional이 들어가있는데요. 제가 실습 환경에서는, 이 애노테이션 때문인 것 같은데, AjaxAuthenticationProvider 프록시 객체 생성에서 에러가 발생합니다.대체 @Transactional이랑 무슨 상관인지는 파악하지 못했지만 설마..하고 해당 애노테이션을 지우고 나니 AjaxAuthentication 프록시 객체가 잘 생성되고 정상 동작을 하더라고요.이유가 정말 궁금합니다.좋은 강의 감사합니다.
-
해결됨스프링부트 시큐리티 & JWT 강의
3강에서 로그인폼 작성후 실행하면 작성한 입력폼이 안 뜹니다.
안녕하세요 강의 듣고 있는 수강생입니다.좋은 강의 가르쳐주셔서 감사합니다.제가 따라 가다가 막힌 부분이 있어서 질문 남깁니다.3강에서 login - > loginForm 으로 리턴해주고 loginForm을 작성한 후 테스트 할 때loginForm에 작성한 로그인 입력폼이 뜨지 않고loginForm 문자 그 자체만을 반환하고 있습니다.오류도 뜨지 않아서 maven 업데이트나 프로젝트 클린 후 실행해봐도 똑같은데 무엇때문인지 알 수 있을까요 ??
-
해결됨스프링 프레임워크는 내 손에 [스프1탄]
MVC02에서 List 화면이 나오지 않습니다
안녕하세요, 강의 실습을 따라서 진행하는 중에 화면이 잘 안나오는 문제가 있어서 질문 드립니다.지난번에 MVC01에서 화면이 로드되지 않는 문제에 대해 maven clean, install을 알려주셔서 이후에는 화면 부분을 생성할 때마다 maven clean, install을 진행했습니다ㅜㅜ하지만 이번에는 maven clean,install을 실행하거나 프로그램을 껐다가 다시 해봐도 List가 나오지 않습니다.브라우저의 결과는 아래와 같습니다.List 출력 전 json 알림까지도 잘 나왔고 http://localhost:8080/controller/boardList.do에서도 아래 이미지처럼 나왔습니다.main.jsp 파일입니다. 제가 보기에는 오타 없는 것 같아요. 32번줄 table부분은 var listHtml="<table class='table table-boardered'>";로도 바꿔봤는데 결과는 같습니다.controller 부분입니다.또한 pom.xml dependency도 추가했습니다.서버도 문제 없이 작동되고 있습니다.어디가 문제일까요... 강의를 너무 잘 듣고 있는데 환경 설정 때문인지 자꾸 실행되지 않는 부분이 생겨서 질문 남깁니다ㅜㅜegov 4.0으로 초기 셋팅은 강사님과 동일합니다.
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
시큐리티 프로젝트..
부트말고 스프링프레임워크에서 시큐리티 기능을 이용한 회원별 권한 부여된 게시판 기능을 만들려고 하는데 SPRING MVC02와 03, 04 를 한 프로젝트 안에 다 작업해도될까요??필요한 기능이 관리자 - 글쓰기(사진 멀티업로드) 이용자 - 조회, 찜기능 비회원- 조회이런것들입니다.시큐리티 기능을 활용해서 사이트를 만들어보려고 하는데 어떤 챕터를 활용하면 좋을지 의견 부탁드립니다..!기존 세팅은 되어 있어서 MVC01 은 제외하고 작업하면 될 것 같은데이렇게 되면 MVC02부터 실행해도 괜찮은지도 말씀 부탁드립니다..!감사합니다.
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
org.springframework.beans.factory.UnsatisfiedDependencyException
MVC06 소스 톰캣 실행 시 아래 오류가 발생합니다. ERROR: org.springframework.web.servlet.DispatcherServlet - Context initialization failedorg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController': Unsatisfied dependency expressed through field 'memberUserDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'kr.ody.apps.security.MemberUserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1344) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) 구글링으로 파악이 안되네요.원인이 무엇일까요?
-
미해결스프링 시큐리티
LogoutFilter MockMVC 테스트 질문
안녕하세요 양질의 강의 감사합니다 ㅎㅎ개인 프로젝트에 LogoutFilter를 적용하고 테스트해보려는데, 404 에러가 발생합니다. 아마 mockMvc에 필터가 적용이 안된 것 같은데, 지금 생각으로는 수동으로 LogoutFilter 객체를 생성해서 mockmvc에 추가해주는 것밖에 방법이 떠오르지 않습니다. 혹시 아래와 같이 테스트하는 방법 말고 더 적절한 방법이 있을지 궁금합니다. 감사합니다 ^^ @BeforeEach void setUp( WebApplicationContext webApplicationContext, RestDocumentationContextProvider restDocumentation) { this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) .apply(documentationConfiguration(restDocumentation)) .build(); } @Test void signout() throws Exception { mockMvc.perform(RestDocumentationRequestBuilders.post("/v1/logout") .cookie(new Cookie(Constants.ACCESS_TOKEN_KEY, accessToken)) .cookie(new Cookie(Constants.REFRESH_TOKEN_KEY, refreshTokenString))) .andExpect(status().isOk()) .andExpect( result -> { Cookie accessTokenCookie = result.getResponse().getCookie("X-Access-Token"); assertThat(accessTokenCookie.getMaxAge()).isZero(); assertEquals("", accessTokenCookie.getValue()); }); }