반응형
LoginInterceptor
package study.thboard2.common.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Slf4j
//로그인 인터셉터
public class LoginInterceptor implements HandlerInterceptor {
//아래처럼 의존성 주입하려면 config에서 @Bean으로 등록해야 함
//@Autowired
//private LoginService loginService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("interceptor_requestURI = [{}]", requestURI);
HttpSession session = request.getSession();
if ("none".equals(session.getAttribute("id")) || session.getAttribute("id") == null) {
log.info("로그인을 안했네? 로그인으로 가버려~~~~~~~~~");
response.sendRedirect("/login");
return false;
}
log.info("옳지! 로그인 상태구나. 너 하고 싶은데로 가라.");
log.info("stored_session_id = [{}]", session.getAttribute("id"));
return true;
}
}
인터셉터를 config에 추가
package study.thboard2.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import study.thboard2.common.interceptor.LoginInterceptor;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LoginInterceptor loginInterceptor = new LoginInterceptor();
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login", "logout", "/css/**", "/asset/**", "/js/**");
}
//만일 로그인 인터셉터에서 의존성을 주입해서 사용하기 위해선 new를 통해 인터셉터 등록하면
의존성 클래스에서 npe발생하기 때문에 아래처럼 빈으로 등록해서 사용할 것
//@Bean
//public LoginInterceptor loginInterceptor() {
// return new LoginInterceptor();
//}
}
로그인 컨트롤러
package study.thboard2.controller;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import study.thboard2.service.UserService;
import javax.servlet.http.HttpSession;
@Controller
@Slf4j
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
/**
* 로그인 화면
* @param session
* @return
*/
@GetMapping("/login")
public String loginForm(HttpSession session) {
String id = (String) session.getAttribute("id");
log.info("stored session id =[{}]", id);
return id != null ? "redirect:/" : "pages/login" ;
}
/**
* 사용자 로그인
* @param userId
* @param userPassword
* @param session
* @return
*/
@PostMapping("/login")
public String login(@RequestParam String userId,
@RequestParam String userPassword,
HttpSession session) {
String id = userService.login(userId, userPassword);
session.setAttribute("id", id);
return "redirect:/";
}
/**
* 로그아웃 처리
* @param session
* @return
*/
@PostMapping("logout")
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/login";
}
}
로그인 서비스
package study.thboard2.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import study.thboard2.domain.vo.UserVo;
import study.thboard2.mapper.UserMapper;
import java.util.List;
@Service
@Slf4j
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class UserService {
private final UserMapper userMapper;
/**
* 사용자 목록 조회
* @return
* @throws Exception
*/
public List<UserVo> getUserList() throws Exception{
return userMapper.selectUserList();
}
/**
* 사용자 정보 저장
* @param userVo
* @throws Exception
*/
public void regUser(UserVo userVo) {
userMapper.insertUser(userVo);
}
/**
* 아이디/비밀번호 확인
* @param userId
* @param userPassword
* @return
*/
public String login(String userId, String userPassword) {
UserVo userInfo = userMapper.selectByUserId(userId);
return (userInfo != null && userInfo.getUserPassword().equals(userPassword)) ? userInfo.getUserId() : "none";
}
/**
* 사용자 상세 정보
* @param userNo
* @param userId
* @return
* @throws Exception
*/
public UserVo getUserDetail(Integer userNo, String userId) throws Exception{
return userMapper.selectUserDetail(userNo, userId);
}
/**
* 사용자 정보 수정
*
* @param userVo
* @throws Exception
*/
public void modifyUser(UserVo userVo) throws Exception{
userMapper.updateUser(userVo);
}
/**
* 사용자 삭제
*
* @param userNo
* @param userId
* @throws Exception
*/
public void removeUser(Integer userNo, String userId) {
userMapper.delUser(userNo, userId);
}
}
반응형
'IT > development' 카테고리의 다른 글
[thymeleaf] if unless 조건 (0) | 2023.05.13 |
---|---|
[logback] logback 파일 생성 (0) | 2023.05.13 |
[springBoot] spring boot jar파일 배포 삽질(feat. 리눅스) (0) | 2023.05.13 |
[springBoot] 세션 인증 로그인/로그아웃 (0) | 2023.05.08 |
[springBoot] 페이지네이션 처리(feat. Oracle) (0) | 2023.05.07 |