2018-5-31 반복주기 4번째 Session

로그인기능

//UserController
@PostMapping("/login")
    public String login(String userId, String password, HttpSession session) {
        User user = userRepository.findByUserId(userId);
        if (user == null)
            return "redirect:/users/loginForm";

        if (!password.equals(user.getPassword()))
            return "redirect:/users/loginForm";
        // login success
        session.setAttribute("user", user);
        return "redirect:/";
    }


// UserRepository
public interface UserRepository extends JpaRepository<User, Long> {
    // userId를 기반으로 조회를 할 수 있다.
    User findByUserId(String userId);
}

  • login을 구현을 할때 우리는 userId값으로 조회를 하고 싶다. 그래서 인터페이스에 findByUserId라는 메소드를 추가를 한다.
  • 로그인 정보를 저장하기위해서 session을 추가한다. session에 해당 로그인값을 저장한다.
<div class="collapse navbar-collapse" id="navbar-collapse2">
            <ul class="nav navbar-nav navbar-right">
                <li class="active"><a href="/questions/form">Posts</a></li>
                
                <li><a href="/users/loginForm" role="button">로그인</a></li>
                <li><a href="/users/form" role="button">회원가입</a></li>
                
                
                <li><a href="/users/loginout" role="button">로그아웃</a></li>
                <li><a href="/users/{id}/edit" role="button">개인정보수정</a></li>
                
            </ul>
        </div>
  • handlebars.expose-session-attributes=true : 어플케이션속성값에 넣어야 session-attribute가 된다.
  • session에 저장된 데이터는 여러웹페페이지를 돌아다니더라도 남기때문에 로그아웃을 할때 처리를 해줘야한다.
 @GetMapping("/logout")
    public String logout(HttpSession session) {
        session.removeAttribute("sessionedUser");
        logger.debug("logout ok");
        return "redirect:/";
    }
  • 세션에 있는 데이터를 로그아웃을 시킨다.
package codesquad.web;

import codesquad.domain.User;
import codesquad.domain.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/users")
public class UserController {
    public static final Logger logger = LoggerFactory.getLogger(UserController.class);
    @Autowired
    private UserRepository userRepository;

    @GetMapping("{id}/form")
    public String updateForm(@PathVariable Long id, Model model, HttpSession session) {
        Object tempUser = session.getAttribute("sessionedUser");
        if (tempUser == null)
            return "redirect:/users/loginForm";

        User sessionedUser = (User)tempUser;
        if (!id.equals(sessionedUser.getId()))
            throw new IllegalStateException("You can't update the another user");

        User user = userRepository.findOne(id);
        model.addAttribute("user", user);
        return "/user/updateForm";
    }

    @PutMapping("/{id}")
    public String update(@PathVariable Long id, User updatedUser , HttpSession session) {
        Object tempUser = session.getAttribute("sessionedUser");
        if (tempUser == null)
            return "redirect:/users/loginForm";

        User sessionedUser = (User)tempUser;
        if (!id.equals(sessionedUser.getId()))
            throw new IllegalStateException("You can't update the another user");

        User user = userRepository.findOne(id);
        user.update(updatedUser);
        userRepository.save(user);
        return "redirect:/users";
    }

    @GetMapping("/loginForm")
    public String loginForm() {
        return "/user/login";
    }

    @PostMapping("/login")
    public String login(String userId, String password, HttpSession session) {
        User user = userRepository.findByUserId(userId);
        if (user == null) {
            logger.debug("login failed user is null");
            return "redirect:/users/loginForm";
        }

        if (!password.equals(user.getPassword())) {
            logger.debug("login failed");
            return "redirect:/users/loginForm";
        }
        logger.debug("login success");
        session.setAttribute("sessionedUser", user);
        return "redirect:/";
    }

    @GetMapping("/logout")
    public String logout(HttpSession session) {
        session.removeAttribute("sessionedUser");
        logger.debug("logout ok");
        return "redirect:/";
    }
}
  • session이 너무 복잡해서 session을 관리하는 부분을 나눠야한다.
Written on May 31, 2018