Fairy ' s
[Spring] 게시판 / 함수 & 개념 정리 #1 본문
개념 정리 #1
Spring Security Framework
- 자바 서버 개발을 위해 필요로 한 인증, 권한 부여 및 기타 보안 기능을 제공하는 프레임 워크
Logger (BoardController.java) // 참고
- Logging (실행 기록) : 프로그램 개발, 운영시 생기는 문제점을 관리, 모니터링 할 수 있는 데이터
- Console 창에서 확인할 수 있음, System.out.println() 으로도 확인이 되지만, 시스템이 느려질 수 있고,
파일로는 저장이 불가능하기 때문에 주로 log를 사용해서 파일로 저장해 분석할 필요성이 있음 - 사용 방법은 변수 선언한 후 명령어를 호출(logger.info("로그타이틀 {}", 출력 값))하는 방식, 아래 코드 참고
// BoardController.java
@Controller
@RequestMapping("/board/*")
public class BoardController {
private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
...
@RequestMapping(value = "/board/writeView", method = RequestMethod.GET)
public void writeView() throws Exception{
logger.info("writeView");
}
...
}
BCryptPasswordEncoder (MemberController.java) // 참고
- 비밀번호를 암호화하는 데 사용할 수 있는 메서드를 가진 '클래스'
- BCrypt 해싱 함수를 사용해 비밀번호를 인코딩해주는 메서드 (1), 사용자에 의해 제출된 비밀번호 (2),
저장소에 저장되어 있는 비밀번호의 일치 여부 (3)를 확인해주는 메서드 제공 - spring-security.xml 네임스페이스 bean 체크 후 코드에 BCryPasswordEncoder bean 코드 작성
pom.xml에 스프링 시큐리티 추가, web.xml 기본 설정 추가
// spring-security.xml
<beans:bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
// web.xml
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/appServlet/servlet-context.xml
/WEB-INF/spring/spring-security.xml
/WEB-INF/spring/context-common.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
// pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
Ex ))
// MemberController.java
@Inject
BCryptPasswordEncoder pwdEncoder;
@Controller
@RequestMapping("/member/*")
public class MemberController {
...
// 회원가입 post
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String postRegister(MemberVO vo) throws Exception {
...
String pwd = pwdEncoder.encode(inputPass);
vo.setUserPass(pwd);
...
}
...
}
HTTP Request GET / POST (*Controller.java) //참고1 // 참고2
- GET - base url 뒤에 원하는 값을 쿼리 형태로 붙여서 request 보내는 것
(GET을 붙이지 않아도 default값으로 GET이 붙음) - POST - base url 뒤에 request시 값이 붙지않고 HTTP 패킷의 BODY에 보내는 것
- GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용함
(DB로 따지면 GET - SELECT, POST - CREATE) - GET은 리소스를 조회, 여러 번 요청하더라도 응답이 같음 / POST는 리소르를 새로 생성, 업데이트
// BoardController.java
// 게시판 글 작성
@RequestMapping(value = "/write", method = RequestMethod.POST)
public String write(BoardVO boardVO, MultipartHttpServletRequest mpRequest) throws Exception{
logger.info("write");
service.write(boardVO, mpRequest);
return "redirect:/board/list";
}
// 게시판 목록 조회
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(Model model, @ModelAttribute("scri") SearchCriteria scri) throws Exception{
logger.info("list");
model.addAttribute("list",service.list(scri));
PageMaker pageMaker = new PageMaker();
pageMaker.setCri(scri);
pageMaker.setTotalCount(service.listCount(scri));
model.addAttribute("pageMaker", pageMaker);
return "board/list";
}
Model 객체, @ModelAttribute (BoardController.java) // 참고
- Model 객체 : Controller에서 생성된 데이터를 담아 View로 전달할 때 사용하는 객체
- @ModelAttribute : HTTP body 내용과 HTTP 파라미터 값들을 Getter, Setter, 생성자를 통해 주입하기 위해 사용 일반 변수는 model 객체를 통해 전달
@RequestParam
- 사용자가 전달하는 값을 1:1로 매핑해주는 어노테이션
- 파라미터를 통해 값을 전달할 때 자주 사용
HttpServletResponse, MultipartHttpServletRequest / (BoardController.java) // 참고1 // 참고2
- Servlet Container의 객체
- Servlet : JAVA를 사용하여 웹을 만들기 위해 필요한 기술, 클라이언트의 요청에 따른 결과 전송
- Servlet은 HttpServletResponse객체에 Content Type, 응답코드, 응답 메시지 등을 담아서 전송함
- MultipartHttpServletRequest로 파일을 여러 개 받아올 수 있고, getFiles 메소드를 통해 List 형태로 받을 수 있음
// BoardController.java
@RequestMapping(value = "/updateView", method = RequestMethod.GET)
public String updateView(BoardVO boardVO,
@ModelAttribute("scri") SearchCriteria scri,
Model model) throws Exception {
logger.info("updateView");
model.addAttribute("update", service.read(boardVO.getBno()));
model.addAttribute("scri", scri);
List<Map<String, Object>> fileList = service.selectFileList(boardVO.getBno());
model.addAttribute("file", fileList);
return "board/updateView";
}
@RequestMapping(value = "/update", method = RequestMethod.POST)
public String update(BoardVO boardVO,
@ModelAttribute("scri") SearchCriteria scri,
RedirectAttributes rttr,
@RequestParam(value="fileNoDel[]") String[] files,
@RequestParam(value="fileNameDel[]") String[] fileNames,
MultipartHttpServletRequest mpRequest) throws Exception {
logger.info("update");
service.update(boardVO, files, fileNames, mpRequest);
rttr.addAttribute("page", scri.getPage());
rttr.addAttribute("perPageNum", scri.getPerPageNum());
rttr.addAttribute("searchType", scri.getSearchType());
rttr.addAttribute("keyword", scri.getKeyword());
return "redirect:/board/list";
}
Attribute (BoardController.java)
- model.addAttribute();의 addAttribute는 Model에 데이터를 담을 때 사용
- RedirectAttribute는 "redirect:/ "; 사용 시 데이터를 전달할 때 사용
// BoardController.java
// 게시판 목록 조회
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(Model model, @ModelAttribute("scri") SearchCriteria scri) throws Exception{
...
model.addAttribute("list",service.list(scri));
...
}
- model.addAttribute("list",service.list(scri)); 는 service.list(scri) 에 담긴 데이터를 "list"라는 이름으로 담는다는 뜻
파일 추가
- pom.xml에 Maven Dependency 추가
- webapp ▷ WEB-INF ▷ spring ▷ context-common.xml 생성, 코드 추가
- web.xml <param-value> </param-value> 사이 /WEB-INF/spring/context-common.xml 추가
- FileUtils.java 작성
// pom.xml
<!-- MultipartHttpServletRequset -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
// web.xml
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/appServlet/servlet-context.xml
/WEB-INF/spring/spring-security.xml
/WEB-INF/spring/context-common.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
// context-common.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd">
<!-- MultipartResolver 설정 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000" />
<property name="maxInMemorySize" value="100000000" />
</bean>
</beans>
'Study > Spring' 카테고리의 다른 글
[Spring] Annotation (0) | 2023.01.17 |
---|---|
[Spring] 게시판 / 함수 & 개념 정리 #3 (0) | 2023.01.06 |
[Spring] 개발 환경 구축 (0) | 2023.01.04 |
[Spring] 게시판 / 함수 & 개념 정리 #2 (0) | 2023.01.02 |
[Spring] 게시판 / 작동 순서 (0) | 2023.01.02 |
Comments