Spring ๐ŸŒฑ

UserSesseion ์žฌ๋กœ๋“œํ•˜๊ธฐ

z.zzz 2023. 11. 3. 22:09

์ตœ์ดˆ ์†Œ์…œ ๋กœ๊ทธ์ธ ์‹œ, ๋‹‰๋„ค์ž„์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค ํ–ˆ๋‹ค.

๋งŒ์•ฝ ๋‹‰๋„ค์ž„์ด ์žˆ๋‹ค๋ฉด, ๋‹‰๋„ค์ž„์„ ์ž…๋ ฅ๋ฐ›๋Š” ํผ์„ ๋„์šฐ์ง€ ์•Š๋Š”๋‹ค.

@PutMapping("/users/update")
public RedirectView updateUserInfo(@LoginUser SessionUser sessionUser, SetNicknameForm nicknameForm, BindingResult result) {

    String nickname = nicknameForm.getNickname();

    if (result.hasErrors()) {
        System.out.println("form error");
        return new RedirectView("/home");
    }

    userService.updateUserInfo(sessionUser.getId(), nickname);
    sessionUser.updateNickname(nickname);

    userService.reloadSessionUserInfo("user", sessionUser);

    return new RedirectView("/home");
}

์œ„์™€ ๊ฐ™์ด ๋‹‰๋„ค์ž„์„ ์ž…๋ ฅ๋ฐ›์•„ userRepository์— ๋‹‰๋„ค์ž„์„ ์ €์žฅํ•˜๊ณ  sessionUser์—๋„ ๋‹‰๋„ค์ž„์„ ์„ค์ •ํ–ˆ๋‹ค.DB์—๋„ ์ €์žฅ๋œ ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ™ˆํ™”๋ฉด์— ์ ‘์†ํ•˜๋ฉด ๊ณ„์† ๋‹‰๋„ค์ž„์„ ์ž…๋ ฅ๋ฐ›๋Š” ์ฐฝ์ด ๋–ด๋‹ค..

 

๋ฌธ์ œ๋Š” HttpSession์— ์žˆ์—ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ @LoginUser SessionUser sessionUser ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์˜ค๋Š”๋ฐ SessionUser๋Š” HttpSession์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์œ„ ์ฝ”๋“œ์—์„  ๋ณ€๊ฒฝ๋œ sessionUser ์ •๋ณด๋ฅผ HttpSession์— ๋ฐ˜์˜ํ•ด์ฃผ์ง€ ์•Š์•„, ๊ธฐ์กด์˜ ๋‹‰๋„ค์ž„์ด ์—†๋Š” ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ์ •๋ณด๊ฐ€ ์กฐํšŒ๋œ ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค. 

 

๋”ฐ๋ผ์„œ HttpSession์—์„œ ํ•ด๋‹น ์œ ์ €๋ฅผ ์‚ญ์ œ(remove)ํ•œ ๋’ค, ๋‹ค์‹œ ์œ ์ €๋ฅผ ์„ค์ •(set)ํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ–ˆ๊ณ , ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

public class UserController {
    @PutMapping("/users/update")
    public RedirectView updateUserInfo(@LoginUser SessionUser sessionUser, SetNicknameForm nicknameForm, BindingResult result) {

        String nickname = nicknameForm.getNickname();

        if (result.hasErrors()) {
            System.out.println("form error");
            return new RedirectView("/home");
        }

        userService.updateUserInfo(sessionUser.getId(), nickname);
        sessionUser.updateNickname(nickname);

        userService.reloadSessionUserInfo("user", sessionUser);

        return new RedirectView("/home");
    }
}

public class UserService {
    public void reloadSessionUserInfo(String user, SessionUser sessionUser) {
    	// HttpSession์˜ ์œ ์ € ์ •๋ณด ์žฌ๋กœ๋”ฉ
        httpSession.removeAttribute("user");
        httpSession.setAttribute("user", sessionUser);
    }
}