Springショッピングモールの作成-5ログイン

12614 ワード

ログインの実装


セッションとCookieを使用してログインを実施します.
login.jspを作成し、既存のjoinを作成します.jspから一部のみインポートし、コントローラからGetMappingを作成します.
	@GetMapping("/member/login")
	public String login(@ModelAttribute("loginMemberBean") MemberDto loginMemberBean) {
		return "member/login";
	}
パラメータはセッションログインであるため、HttpSessionが追加されます.modelAttributeは登録コストのときに使用される同じMemberDtoであるため、有効性検証は追加されず、名前だけをLoginMemberBeanに変更し、@ValidとBindingResultを追加して検証します.
	@PostMapping("/member/login")
	public String login_pro(HttpSession session, @Valid 
    				@ModelAttribute("loginMemberBean") MemberDto loginMemberBean, 
    				BindingResult result) {
		
		if(result.hasErrors()) {
			return "member/login";
		}
		
		memberService.loginMember(session, loginMemberBean);
		
		if(session.getAttribute(MemberDto.MEMBER_LOGIN) != null) {
			return "member/login_success";
		}else {
			return "member/login";
		}
		
	}
サービスは、入力したメンバーのIDとパスワードをデータベースでクエリーし、カラムが存在する場合はセッションに保存します.
	public void loginMember(HttpSession session, MemberDto loginMemberBean) {
		MemberDto findMember = memberDao.findMember(loginMemberBean);
		
		
		if(findMember != null) {
			session.setAttribute(MemberDto.MEMBER_LOGIN, findMember);
		}
	}
その後、コントローラでユーザーのセッションを再検索し、loginDtoというセッションがない場合はlogin画面を返し、login success画面にユーザーを移動させます.
login_success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var='root' value="${pageContext.request.contextPath}" />

<script>
	alert("로그인 되었습니다")
	location.href= "${root}/";
</script>

Interceptorを使用して画面を処理する


画面上のログインが成功するとログアウトのみが表示されるため、Interceptorを使用します.ログインしていない場合はログインタグのみが表示されます.
ログインしていない場合

ログイン時

Interceptorを継承するクラスを作成します.
public class CheckLoginInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {

		MemberDto memberVO = (MemberDto)request.getSession().
        						getAttribute(MemberDto.MEMBER_LOGIN);
		 
		request.setAttribute("loginMember", memberVO);
		return true;
	}

}
preHandleは、まず、コントローラを指定する操作の前に実行する操作を実行します.
特定のコントローラが実行される前に、セッションからメンバー情報が取得され、画面にメンバー情報が渡されます.

したがって、jspに切り替えたオブジェクトがnullの場合、登録またはログインコストが表示され、nullでない場合、受注リストとログアウトが表示されます.
パスを指定する必要があります.servlet-context.xmlにbeanでインタフェースを登録すればいいです.
<beans:bean id="checkLoginInterceptor" class="sloth.shop.interceptor.CheckLoginInterceptor" />
	<interceptors>
		<interceptor>
			<mapping path="/**" />
			<beans:ref bean="checkLoginInterceptor" />
		</interceptor>
     	 </interceptors>
これにより、Interceptorが正常に動作します.