이어서...
[게시물의 수정과 첨부파일]
첨부파일은 사실상 수정이라는 개념이 존재하지 않습니다.
삭제 후 다시 추가하는 방식입니다.
1. 첨부파일 데이터를 보여주기 위해서 modify.jsp(수정화면) 에 HTML 과 CSS를 추가합니다.
CSS는 기존에 사용하던 것과 동일하므로 복사해옵니다. (CSS 생략)
modify.jsp
2. modify.jsp javascript 부분에 첨부파일을 추가하는 코드를 작성합니다. (register.jsp 것 복사)
1) cloneObj 를 하는 것이 register.jsp 와 다릅니다.
modify.jsp javascript
3. modify.jsp javascript 부분에 게시글 수정(modify)버튼이 눌렸을 때 첨부파일에 대한 수정정보를 전송하기 위한 코드를 추가합니다.
1) 기존의 form 태그에 대한 버튼 event 부분에 다음과 같이 추가합니다.
게시글이 수정이 되었을 때, 첨부파일을 리스트형식(attachList)로 hidden 타입으로 보내는 것입니다.
modify.jsp javascript 첨부파일 수정정보 전송추가
4. BoardServiceImpl.java 의 modify() 를 @Transctional 하여주고
첨부파일을 삭제했을 때, 파일은 삭제되지 않는지 확인합니다.(문제점이므로 수정해야 할 부분)
1) 해당 게시글의 첨부파일에 대한 DB를 모두 삭제(attachMapper.deleteAll(board.getBno());)
게시글 수정이 성공하면 첨부파일 정보를 변경합니다.
BoardServiceImpl.java modify()
[잘못 업로드된 파일 삭제]
1. 첨부파일 정보와 DB 상의 정보가 일치하지 않는 상황
1) 첨부파일만을 등록하고 게시물을 등록하지 않았을 떄
(1) 파일은 이미 서버에 업로드되었지만, 게시물을 등록하지 않았으므로 의미 없이 파일들만 서버에 업로드된 상황
2) 게시물을 수정할 때 파일을 삭제했지만 실제로 폴더에서 기존 파일은 삭제되지 않은 문제
(1) 데이터베이스에는 기존 파일이 삭제되었지만, 실제 폴더에는 남는 문제
★ 해결방법
1. 어제 날짜로 등록된 첨부파일의 목록을 구한다.
2. 어제 업로드가 되었지만, DB에 존재하지 않는 파일들을 찾는다.
3. 그러한 파일을 삭제한다. (주기적으로 반복)
[Quartz 라이브러리 설정 - 잘못 업로드된 파일의 삭제 해결방법]
Quartz 라이브러리는 주기적으로 반복해야 하는 작업을 Java를 이용해서 처리할 수 있도록 하는 경우에 사용합니다.
브라우저랑 동작하지 않고 정해진 시간에 정해진 작업을 합니다.(배치작업)
1. pom.xml 에 의존성을 추가하고 root-context.xml 에 Namespace task를 선택합니다.
pom.xml
root-context.xml Namespacetask
root-context.xml Source
2. FileCheckTask.java 를 생성합니다.
1) @Scheduled cron 으로 정해진 시간에 동작하도록 합니다. 현재는 1분마다 로깅을 하는 코드입니다.
* 는 와일드 카드이므로 매 분, 매 시간 등을 의미합니다.
2 ) root-context.xml 에 FileCheckTask.java의 패키지를 scan 할 수 있도록 Source에 추가합니다.
FileCheckTest.java / root-context.xml
1분 마다 로깅 작업
3. ★ 해결방법을 하기 위해서 BoardAttachMapper.java 에 getOldFiles() 메소드를 등록하여
어제 날짜로 등록된 파일들을 찾을 수 있도록 합니다.(BoardAttachMapper.xml 에 쿼리문도 추가)
select * from tbl_attach where uploadpath = CURDATE() - INTERVAL 1 DAY;
현재 날짜에서 1일을 빼는 쿼리문입니다.
https://extbrain.tistory.com/58
[MySQL] 시간 더하기, 빼기 (DATE_ADD, DATE_SUB 함수)
▶MySQL 시간 더하기, 빼기 (DATE_ADD, DATE_SUB 함수) ▶설명 MySQL에서 특정 시간을 기준으로 더하거나, 빼야 하는 경우가 있습니다. 이 때 사용하는 함수가 DATE_ADD와 DATE_SUB입니다. DATE_ADD는 기준 날짜에..
extbrain.tistory.com
BoardAttachMapper.java / BoardAttachMapper.xml
4. FileCheckTask.java 를 수정합니다.
getFolderYesterDay()로 어제 날짜를 구하고
cron= " 0 0 2 * * *" 매일 새벽 2시에 동작하도록 설정합니다.
1) List<BoardAttachVO> fileList = attachMapper.getOldFiles()로
DB에 있는 첨부파일들의 리스트를 가져옵니다.
2) List<Path> fileListPaths 에 일반파일일 경우와, 이미지파일일 경우는 thumbnail 까지 넣어줍니다.
파일경로를 비교하기 위한 작업입니다.
3) targetDir 에 getFolderYesterDay() 로 어제 자의 파일들을 넣고
removeFiles에 file.toPath() == false 로 fileListPaths.contains에 해당하지 않는
파일(false)들을 넣습니다.
FileCheckTask.java
5. 비정상적인 데이터를 등록해봅니다.
1) cron 의 시간과 컴퓨터 시간을 하루 앞으로 바꾸어 (새벽2시까지 못기다리니까..)
checkFiles()가 실행되는지 확인해봅니다.
DB에는 안들어갔지만, 파일에는 들어갔습니다. (Submit Button을 누르지 않았음)
오늘이 6월 21일이므로 하루 전의 폴더를 삭제해야 해서, 컴퓨터 시간을 6월22일로 바꿨습니다.
6월 21일자의 DB에 없지만 폴더에 있던 첨부파일(컴퓨터 시간은 6월 22일)들이 11:56분이 되자 삭제되었습니다.
[Spring Web Security]
스프링 시큐리티의 기본 구조
exam 05 프로젝트를 복사 한 후 exam 06 으로 복사/붙여넣어 새로운 프로젝트를 시작하겠습니다.
[환경구성]
1. pom.xml에 security 를 위한 의존성을 추가합니다.
pom.xml
2. Spring Bean Configuration File 로 security-context.xml 로 만들고 Namespace security를 추가합니다.
1) version 도 다음과 같이 바꿔줍니다.(빨간밑줄)
2) 그 후, 다음 태그들을 추가합니다.
security-context.html
3. web.xml 에 security-context.xml 을 설정파일로 할 수 있도록 추가합니다.
1) springSecurity 필터도 추가합니다.
(1) Spring Security 가 한글처리가 되도록 Encoding Filter 뒤에 추가합니다.
web.xml param 추가
web.xml Filter 추가
[Security 가 필요한 URI 설계]
1. Spring Security 의 최소한의 설정이 완료되었다면 Security 에 의해 제어가 필요한 URI를 설계합니다.
1) /security/all : 로그인을 하지 않은 사용자도 접근 가능한 URI
2) /security/member : 로그인 한 사용자들만이 접근할 수 있는 URI
3) /security/admin : 로그인 한 사용자들 중에서 관리자 권한을 가진 사용자만이 접근할 수 있는 URI
2. SecurityController.java를 생성하여 각 URI에 맞는 메소드를 생성합니다.
SecurityController.java
3. views/security/{admin.jsp, all.jsp, memeber.jsp}를 작성합니다.
views/security/{admin.jsp, all.jsp, member.jsp}
[인증과 권한부여]