📌
【初心者向け/ITスクール 75日】個人プロジェクトスタート10日目
はじめに
今日も相変わらず、Pathvariableで苦戦しました。
特に、updateの際によりによってbuttonが二つあったので、GET要請をし、
会員退会ページを作成しました。
th:onclick="|location.href='@{delete}'|"
なんとなく偶然に職別idを付けることができました。
保安
管理者権限と、メンバー権限を分け、保安を強化するのが一番大事だと考え、interceptionを勉強し、活用してみました。
LoginCheckInterceptor
@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("認証チェック {}", requestURI);
HttpSession session = request.getSession();
if(session == null || session.getAttribute("loginMember") == null){
log.info("未認証ユーザーの要請");
//ログインに redirect
response.sendRedirect("/login?redirectURL=" + requestURI);
return false;
}
return true;
}
}
MemeberCheckInterceptor
@Slf4j
public class MemberCheckInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Member member = (Member)session.getAttribute("loginMember");
String currentId = member.getMemberId();
String requestedMemberId = null;
String requestURI = request.getRequestURI();
String[] path = requestURI.split("/");
//要請URIからURIを抽出
if(path.length > 2 && path[1].equals("members")){
requestedMemberId = path[2];
}
//現在ユーザーのIDと要請したユーザーのIDが異なる場合404エラー
if(requestedMemberId!=null && !currentId.equals(requestedMemberId)){
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return false;
}
return true;
}
}
WebConfig
package com.hyon01.minishop;
import com.hyon01.minishop.web.interceptor.LoginCheckInterceptor;
import com.hyon01.minishop.web.interceptor.MemberCheckInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new LoginCheckInterceptor())
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/", "/members/add", "/login", "/logout",
"/css/**", "/*.ico", "/error","/images/**");
registry.addInterceptor(new MemberCheckInterceptor())
.order(2)
.addPathPatterns("/members/**")
.excludePathPatterns("/", "/members/add", "/login", "/logout",
"/css/**", "/*.ico", "/error","/images/**");
}
}
結果
TEST1がTEST2の情報にアクセス要請
Discussion