Java/Spring MVC

[20.10.05 SpMVC_ReadBook] security-contex.xml 코드 해석, 로그아웃 메소드는 포스트, web.xml의 <context-param> 순서, 모델어트리뷰트가 하는일

우롱차 2020. 10. 5. 14:39
728x90
<security:logout logout-url="/logout"/>

스프링에서 공통으로 사용하는 url

 

<security:intercept-url pattern="" access=""/>

사용자가 어떠어떠한 패턴으로 요청을햇을때

권한을 부여하는 부분

policy!

 

<security:intercept-url pattern="/admin/**" access="hasRole('ADMIN')"/>

/admin/~~ url

관리자 권한으로 접근을 하면

"hasRole('ADMIN')" : 권한이 ADMIN인 사람만 접근을 가능하게 하라! 

RLOE이 ADMIN인 사람만 접근을 가능하게 하라는 이야기

 

<security:intercept-url pattern="/user/mypage"  access="hasAnyRole('ADMIN','USER')"/>

여러 롤들을 지정할때는 hasAnyRole 필요할때는 컴마 찍어서 지정해주면 된다

자기와 관리자만 접근이 가능하도록

 

permitAll() : url이 가장 길게 올라와있는거 부터 올려라 패턴이 긴쪽부터 위로 올려야만이

내가 원하는대로 적용이 됌!!!!!!

 

<security:http auto-config="true" use-expressions="true">

use-expressions : 를 설정 해주지 않으면 hasRole함수가 실행이 되지않는다

이 항목은 기본값으로 포함이된다.

 

<security:logout logout-url="/logout" logout-success-url="/"  invalidate-session="true"/>

로그아웃이 되면 제일 처음 화면으로 가고, session을 삭제하라고 true라고 작성!

 

 

 

스프링 폼태그는 <form:form>

스프링 security에서 보낸 토큰을 자동으로 hidden으로 넣어준다

만약 스프링폼태그하지 않으면 반드시 토큰을만들어줘야함

book-write.jsp 페이지 소스본거

프론트랑 버무리다 보며는 문제가 생길수가잇음

만약 내가 포스트에 토큰을 쓰는걸 안하고싶다

하면

이걸 트루로 바꿔주고

 

하지만 우리는 false로 쓸 것이다 기본값으로!!

이게 더 보안에 강하고 안정! 

 

사용하지않는것을 true로 하겠다

사용하겠다는거를 false로 하겠다!!!!!

 

<!-- security:csrf의 disable 속성을 true로 설정하면 -->
<!-- POST 전송시 Token을 첨부하지 않아도 사용가능하도록 한다  -->
<!-- 단, 이 방법은 다른 API와 연동할때를 제외하고 -->
<!-- 사용하지 않는 것이 좋다 -->
<!-- 기본값은 항상 disabled="false"로 설정한다 -->
<security:csrf disabled="false"/>

 

 

<bean  class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
	<constructor-arg value="4" index="0"/>
</bean>

자체적으로 salt를 생성하고 암호화 문자를 만들어내는것

value숫자는 뭐냐면 내부에서 몇번 반복해서 암호문을 만들래? 히는것

10의 4승?정도된대

4번이아니라

기본 값은 4임 이걸 생략하면 오류가나서 넣어주는 것 뿐임

값이 커지면커질수록 클래스를 만드는데 시간이 엄청 걸린당~

 

BCrypt까지 치고 ctrl + space 하면 두번째꺼루 선택!!

 

 

이것도 따로 만들어줌 스캔하는 시점을 좀 바꿔준거

 

서비스 패키지는 서블릿에서 스캔하는 친구

atho는 컨텍스트에서 스캔하는 친구 

그래서 auth에 두번 스캔이된다 별상관없음

걍 검색만 되는거임

>> security-context.xml


spring security project에서 form에 method=POST로 설정할 경우
반드시 ${_csrf.parameterName}을 name으로 하고
${_csrf.token}을 value로 하는 input box를 포함해야만 한다.
spring security 5.x에서는 ${_csrf.parameterName}은 _csrf라는 문자열일 뿐이지만
input name ="_csrf" 라고 사용하지 않는다.
security version에 따라 name 변수명이 다르기 때문이다.

spring security에서 logout
spring security에서는 logout을 반드시 POST method로 요청을 해야 한다.
*/%>
<form action="${rootPath}/logout" method="post">
	<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">
	<button>로그아웃</button>
</form>

로그아웃할때는 메소드가 반드시 포스트여야함

>> logout.jsp


user디테일서비스는 context.

mybatis자체를 컨텍스트영역으로 옮겨서 사용하겠다.

마이바티스가 다행히 서블릿까지 잘 신호가감

서블릿에서 빼주고 스프링 폴더로 이동함!

이게 context영역으로 옮겨준거임~

 

 

 

<!-- mybatis-context.xml을 servelt영역에서 context영역으로 이동
spring security UserDetailService에서
Dao, mapper 등을 필요로 하기 때문에
일반적인 프로젝트에서는 기존처럼 servlet영역에 설정을  하면되지만
spring security에서 DB로부터 사용자 정보를 조회하는 기능을  사용하려면
mybatis-context가 context영역에 있어야한다.

param-value를 설정할 때 *-context.xml로 할 수 있다
그런데 *-context.xml로 설정을 하면
각 xml 파일이 읽어지는 시점이 미묘하게 흐트러져
bean을 서로 찾지 못하는 문제가 발생할 수 있다. -->

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
    	/WEB-INF/spring/mybatis-context.xml //여기에서 만들어진 다오를
        아래 코드가 가져가서 사용해야한다.
        근데 별표로하면 누가먼저 읽어질지 모름
		//문법은 틀리지않지만 
		서블릿은 문제가 아직까지 없었지만
        context-param은 순서의 미묘한 차이때문에
        오류가 발생할 가능성이 있다.
        그래서 이렇게 순서대로 작성을 해준다!!!
		/WEB-INF/spring/security-context.xml 
		/WEB-INF/spring/root-context.xml
	</param-value>
</context-param>

 

>> web.xml


여섯개의 변수는 이름을 똑같이 만들어줘야한다!!!

userdetailsVO

우리는 보통 enabled만 해줌

그리고 getter, setter가 필수

 

 

이렇게 vo를 만들어주고

 

security-context.xml에 여러가지 설정해주고

security-context.xml 우리가 만든게 거의 공식이라고 보면 된다!!

실무에서 사용되는 정도도 보통 이정도랭


얘를 생성하기 위해서 생성자를 호출했는데 생성자가 없다라고 오류가 남

우리는 생성자를 쓴 적이 없는데

그걸 해주는게 @ModelAttribute가 대신해줌

Vo vo = new vo() 이걸 대신해준다고!!! 모델어트리뷰트가

 

>> MemberController


>>UserDetailVO & user-mapper.xml

728x90