๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JAVA/JAVA-Project

[์Šคํ”„๋ง] ๊ฒŒ์‹œํŒ ๋น„๋ฐ€๊ธ€ ์„ค์ • ๊ตฌํ˜„ 21. 05. 05.

๐Ÿ”Ž ๊ธฐ๋Šฅ ์„ค๋ช…

๊ฒŒ์‹œ๊ธ€์„ ๋“ฑ๋กํ•  ๋•Œ, ๋น„๋ฐ€๊ธ€ ์„ค์ • ์ฒดํฌ๋ฅผ ํ•œ ํ›„ ๋“ฑ๋กํ•˜๋ฉด, ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์—์„œ ์ž๋ฌผ์‡  ์•„์ด์ฝ˜์œผ๋กœ ๋น„๋ฐ€๊ธ€ ํ‘œ์‹œ๊ฐ€ ๋˜๊ณ , ์ด ๊ธ€์€ ์ž‘์„ฑ์ž์™€ ๊ด€๋ฆฌ์ž๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. (๋‹ค๋ฅธ ํšŒ์›์€ ์•„์˜ˆ ๊ธ€์ œ๋ชฉ์„ ํด๋ฆญ์กฐ์ฐจ ๋ชป ํ•จ.)

 

 

1. DB ํ…Œ์ด๋ธ”๊ณผ VO์— ๋น„๋ฐ€๊ธ€ ๊ด€๋ จ ํ•„๋“œ ์ถ”๊ฐ€.

ํ…Œ์ด๋ธ”์— secret์ด๋ผ๋Š” ์ปฌ๋Ÿผ๊ณผ vo์—๋Š” boolean ํƒ€์ž…์œผ๋กœ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ž๋ฐ”์—์„œ boolean ํƒ€์ž…์ด DB๋กœ ๋“ค์–ด๊ฐˆ ๋• ์•Œ์•„์„œ 0, 1๋กœ ๋ฐ”๋€Œ์–ด์„œ ๋“ค์–ด๊ฐ!

 

@Data
@NoArgsConstructor
@AllArgsConstructor
public class BoardVO {
    private Long bno;         // ๊ธ€๋ฒˆํ˜ธ
    private String category;     // ์ง„๋ฃŒ ๊ตฌ๋ถ„ ์นดํ…Œ๊ณ ๋ฆฌ
    private String title;         // ์ œ๋ชฉ
    private String content;     // ๋‚ด์šฉ
    private String writer;         // ์ž‘์„ฑ์ž
    private Date regdate;         // ๋“ฑ๋ก์ผ
    private int replyCnt;         // ๋Œ“๊ธ€์ˆ˜
    private int hitCount;         // ์กฐํšŒ์ˆ˜
    private boolean secret;     // ๋น„๋ฐ€๊ธ€ ์—ฌ๋ถ€
    private List<BoardAttachVO> attachList = new ArrayList<BoardAttachVO>(); // ์ฒจ๋ถ€ํŒŒ์ผ ๋ชฉ๋ก
}

 

 

2. register.jsp ์ฒ˜๋ฆฌ (๊ธ€ ๋“ฑ๋ก ํŽ˜์ด์ง€)

<div class="form-check form-check-inline mt-3">
    <input class="form-check-input" type="checkbox" name="secret" id="secret">
    <label class="form-check-label">๋น„๋ฐ€๊ธ€ ์„ค์ •</label>
</div>

๐Ÿ”ท jsp์—์„œ name๊ฐ’์„ ํ•„๋“œ์™€ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค.
๐Ÿ”ท checkbox ํƒ€์ž…์€ form์œผ๋กœ ์ „์†ก๋  ๋•Œ ์•Œ์•„์„œ true/false๋กœ ๋„˜์–ด๊ฐ„๋‹ค!

 

3. list.jsp ์ฒ˜๋ฆฌ (๊ธ€ ๋ชฉ๋ก ํŽ˜์ด์ง€)

 <c:if test="${board.secret == true}">
    <c:choose>
        <c:when test="${board.writer eq member.vo.userid || member.authorities eq '[ROLE_ADMIN, ROLE_MEMBER]'}"> <!-- ์ž‘์„ฑ์ž์ด๊ฑฐ๋‚˜ ๊ด€๋ฆฌ์ž์ผ ๋•Œ -->
            <td><a href="get${pageMaker.cri.listLink}&bno=${board.bno}" class="text-secondary text-center"><i class="icofont-lock"></i><c:out value="${board.title}"/><span class="text-muted small"> [${board.replyCnt}]</span></a></td>
        </c:when>
        <c:otherwise>
            <td class="text-secondary"><i class="icofont-lock"></i><c:out value="${board.title}"/><span class="text-muted small"> [${board.replyCnt}]</span></td>
        </c:otherwise>
    </c:choose>                                            
</c:if>

๐Ÿ”ท ์ด ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ์ฝ”๋“œ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ.. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ @Preauthorize๋กœ ์ฒ˜๋ฆฌํ•ด ๋ณด๋ ค ํ–ˆ๋Š”๋ฐ ์‹คํŒจํ•˜๊ณ  jsp์—์„œ ํ•ด๋ดค๋‹ค.
(์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ- https://chobopark.tistory.com/97)
๐Ÿ”ท ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๊ธ€์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ROLE_MEMBER ๋˜๋Š” ROLE_ADMIN์œผ๋กœ ํ•ด ๋‘ฌ์„œ, jsp์—์„œ board.writer eq member.vo.userid ์ด ์กฐ๊ฑด ํ•˜๋‚˜๋งŒ ํ•ด๋„ ๊ด€๋ฆฌ์ž๋„ ๋น„๋ฐ€๊ธ€์„ ์ฝ์„ ์ˆ˜ ์žˆ์„ ์ค„ ์•Œ์•˜๋Š”๋ฐ jsp ์ฒ˜๋ฆฌ๊ฐ€ ์šฐ์„ ์ธ ๊ฑด์ง€... ๊ด€๋ฆฌ์ž์ž„์—๋„ ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ์“ด ๋น„๋ฐ€๊ธ€์„ ์ฝ์„ ์ˆ˜ ์—†์—ˆ๋‹ค.
๐Ÿ”ท 'jsp์—์„œ ๊ถŒํ•œ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์„๊นŒ'ํ•˜๋‹ค๊ฐ€ ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” Authentication ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ณด๋‹ˆ, Collection ํƒ€์ž…์œผ๋กœ ๊ถŒํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ member.authorities eq '[ROLE_ADMIN, ROLE_MEMBER]' ์ด๋Ÿฐ ์‹์œผ๋กœ ์ ์šฉํ•ด ๋ดค๋Š”๋ฐ.. ๋๋‹ค!

 

4. BoardController ์ฒ˜๋ฆฌ

    @GetMapping({"get", "modify"})
    @PreAuthorize("hasRole('ROLE_MEMBER') || hasRole('ROLE_ADMIN')")
    public void get(@RequestParam Long bno, @ModelAttribute("cri") Criteria cri, Model model) {
        log.info("get or modify.....");
        model.addAttribute("board", service.get(bno));
        model.addAttribute("cri", cri);
    }

๐Ÿ”ท @PreAuthorize๋ฅผ ์ด์šฉํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ์ค„ ์•Œ์•˜๋Š”๋ฐ... ์ฒ˜์Œ ํ–ˆ๋˜ ์ƒ๊ฐ์€ @PreAuthorize("principal.username == #boardVO.writer || #boardVO.secret == false || hasRole('ROLE_ADMIN')")์ด์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ list์—์„œ get์œผ๋กœ ๋„˜์–ด์˜ฌ ๋•Œ, boardVO๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจ!


 

๐Ÿ”Ž ๊ฒฐ๊ณผ


๊ด€๋ฆฌ์ž ๊ณ„์ •(admin99)์€ ์ผ๋ฐ˜ ํšŒ์›(test04)์ด ์“ด ๋น„๋ฐ€๊ธ€์„ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๊ณ 


(๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ์บก์ณ๊ฐ€ ์•ˆ ๋œ๋‹คใ… ใ… ) ์ผ๋ฐ˜ ํšŒ์›์ธ test04๋Š” ํƒ€์ธ์ด ์“ด ๋น„๋ฐ€๊ธ€์„ ํด๋ฆญ์กฐ์ฐจ ํ•  ์ˆ˜ ์—†๋‹ค.