Js / css / image 파일 등 보안 필터를 적용할 필요가 없는 리소스를 설정
@Override
public void configure(WebSecurityWeb) thrwos Exception{
web.ignoring().requestMatchers(Path.Request.toStaticResources().atCommonLocation());
서버에 요청을 하게 되면 SprintSecurity가 해당자원에 접근할수 있는지 권한감사를 하게되는데 기본적으로 정적인파일 까지도 보안 필터를
과정을 진행한다
Js / css / image 같은 파일등 보안필터를 적용할 필요가 없는 리소스 설정을 WebIgnor 설정이라고 한다
이전 권한설정은 admin은 환경설정에만 접근이 가능할수 있도록 했지만 상식적으로는 ?? admin은 모든 페이지에 대한 접근 이 가능해야 할거 같다 그래서 admin 계정에 "MANAGER", "USER" // MANAGER 에게는 "USER" 권한도 부여 했다.
디번 데이터 계층은 JPA을 사용한다 저번 포스팅에서 dependecy를 언급 안했기 때문에 필자기준으로 다소 생소한? 기준으로 적어봤다.
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
타임리프가 thymeleaf 가 SpringSecurity 에게 문법이나 표현식을 지원하는 확장팩이다.
<groupId>org.modelmapper</groupId>
두 객체 간에 값들을 서로 매핑하는 역할을 한다
A 객체의 필드값을 B객체에 매핑 해서 B객체가 A객체의 값을 복사하여 매핑할수 있는 역할을 한다
WebSecurity configure 메소드를 @Override 해야한다 위에 사진처럼 이렇게 설정해주면 정적파일들은 보안 필터 과정을 거치지 않는다
이클래스를 들어가보면 CSS, JAVA_SCRIPT ,IMAGES , 등 정적 자원 파일경로에 대해서는 보안필터를 거치지 않도록 되어 있다.
이거는 오해할수 도 있는 문제일거 같아서 남긴다 permitAll() 이랑 정적파일 관리랑 뭐가 드란가? 라고 생각할수도 있다. 하지만 확연한 차이가 있다.
정적파일도 인증을 받지 않고 권한을 검사 받지 않아도 된다. 하지만 차이점은 존재한다 정적파일은 관리는 보안필터 처리 과정을 거치지 않는다. user 권한을 가진 계정은 permitAll() 권한설정이 누구나 접속이 가능 할수있도록 설정되어 있다.
권한설정이 안되어 있을뿐 보안필터들을 거치기 때문이다.
현재 필자는 "/" 홈으로 요청을 했고 "/" 페이지 권한은 누구나 접속이 가능하다고 설정햇다. 디버깅을 해보면 요청하는 페이지 를 알수가 있다. 현재는 @Override 해줬던 WebSecurity를 주석 처리 해보자 !
신기하게도 js파일등 css파일들을 보안필터를 거치는걸 확인할수 있다 !
저번 포스팅에서 타임리프와 appliation.properties 를 언급하지 않았다 이번포스팅에서 중요한거만 확인하고 넘어거자!!!
타임리프:
- 타임리프thymeleaf 는 자바 라이브러리이며, 웹과 웹이 아닌 환경 양쪽에서 텍스트, HTML, XML, Javascript, CSS 그리고 텍스트를 생성할 수 있는 템플릿 엔진이다. 웹 애플리케이션에서 뷰View 계층 에 보다 적합하지만, 오프라인 환경에서 많은 형태로 처리가 가능하다.
- 스프링 MVC와의 통합 모듈을 제공하며, 애플리케이션에서 JSP로 만든 기능들을 완전히 대체할 수 있다.
- 타임리프의 목표는 세련되고 잘다듬어진 템플릿을 제공하는 것이다. Standard와 SpringStandard를 통해서 강력하고 자연스러운 테플릿을 만들어낼 수 있어 정적 프로토타입도 브라우저에서 정확하게 동작한다. 거기서 더 나아가 다이얼렉트dialect를 개발하여 타임리프를 확장할 수 있다.
www.thymeleaf.org/ecosystem.html 여기서 다양한 자료를 바탕으로 예시를 볼수 있으니 확인바란다.
필자는 YML 을 사용하지 않고 application.properties 를 사용해서 JPA 설정과 devtools 을 설정해줬다.
spring.jpa.hibernate.ddl-auto=create //
- Entity 클래스에 해당하는 테이블을 만들어 주는 역할
spring.jpa.properties.hibernate.format_sql=true
- 콘솔에 찍히는 sql 좀더 읽기 쉽게 포맷해준다
spring.jpa.properties.hibernate.show=true
- 콘솔에 sql에 나오게 한다
spring.devtools.livereload.enabled = true // spring.devtools.restart.enabled=true
- 서버를 기동하지 않고도 UI 화면에서 즉각 변경된 사항을 확인할수 있도록 한다
'Spring' 카테고리의 다른 글
스프링 MVC Controller (0) | 2020.12.03 |
---|---|
@PathVariable(스프링 지향) (0) | 2020.12.01 |
Oracle 연동 (0) | 2020.11.09 |
Aop 패러다임 (0) | 2020.11.09 |
Rest (0) | 2020.11.01 |