참고 : mvc_security_template
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
join.jsp에서 multipart/form-data라서 multipartResolver가 변환해줌 filter-resolver-servlet순서인데
security filter가 먼저 확인해서 token 없구나 라고 인식해버린다. -> filter 추가 등록 필요
<!-- multipart-formdata Filter -->
<filter>
<filter-name>springMultipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>springMultipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filterMultipartResolver
라고 root-context.xml에서 resolver 이름 변경(이름은 고정임)
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${security-version}</version>
</dependency>
C:\Users\admin.m2\repository\org\springframework\security\spring-security-taglibs
jsp페이지에서 해석될 때 태그 라이브러리 가져오기 때문에
프로젝트 lib 폴더에 등록시켜줘야함
header.jsp 에
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
이렇게 등록시켜줌.
아래와 같이 코드 작성
<!-- 인가된 사용자 -->
<sec:authorize access="isAuthenticated()">
<!-- sec:authentication : 인가된 사용자 정보 auth / auth.getPrincipal.getMember 를 member라는 변수라고 지정 ==validationMemberVO -->
<sec:authentication var="member" property="principal.member"/>
<li>
<a href="#">
<c:choose>
<c:when test="${!empty member.u_profile}">
<img class="profile_img" src="${path}/upload${member.u_profile}"/>
</c:when>
<c:otherwise>
<img class="profile_img" src="${path}/resources/img/profile.jpg"/>
</c:otherwise>
</c:choose>
${member.u_name}
</a>
</li>
<li>
<a href="${path}/user/logout">로그아웃</a>
</li>
<li>
<a href="${path}/chat">쳇</a>
</li>
</sec:authorize>
sec:authorize : 권한에 따라서 태그를 보여준다.
AJAX, form 태그 등 무조건 POST 방식이면 CSRF.TOKEN 전달 해야 함!
validate : jQuery에서 만든 라이브러리
<script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.5/dist/jquery.validate.js"></script>
/* validate : jQuery에서 만든 라이브러리
submit 되기 전 검증*/
$("#joinForm").validate({
// 포커스 out시 유효성 검사
onfocusout: function(element) {
this.element(element);
},
rules : {
u_id : {
required : true,
email : true,
// ajax로 검증
remote : {
type : "POST",
url : "${path}/user/uidCheck"
/*,
data : {
'${_csrf.parameterName}':'${_csrf.token}'
}
*/
}
},
$("#form태그아이디값").validate : submit버튼 눌리면 submit 전 검증한다.
messages : {
u_id : {
required : "이메일(아이디)를 작성해주세요.",
email : "올바른 이메일 형식이 아닙니다.",
remote : "이미 존재하는 ID입니다." //false인 경우
},
메세지 출력 지정부
spring security에서는 파라미터에서 csrf토큰 있는지 , 요청 헤더에 csrf토큰 있는지 확인함
ajax 요청 보낼게 많은 경우 공통적으로 전달 한다고 해주면 일일이 csrf토큰 자동 전달하게 만들어줌
// 모든 ajax 통신에 csrf 토큰 전달.
$(document).ajaxSend(function(e,xhr,options){
xhr.setRequestHeader(
'${_csrf.headerName}',
'${_csrf.token}');
});
'Java > Spring' 카테고리의 다른 글
SpringBoot 설치 (0) | 2023.08.29 |
---|---|
채팅구현 - 웹소켓통신 (0) | 2023.08.28 |
SPRING SECURITY 보안프레임워크 (0) | 2023.08.25 |
이메일 검증하는 법 : SMTP 활용 (0) | 2023.08.24 |
CSRF(Cross-Site Request Forgery) 공격 (0) | 2023.08.22 |