//Skip to content
- 재구동 없이 실행
- runtime('org.springframework.boot:spring-boot-devtools')가 있으면 build만 해도 된다. WAS를 재구동 안해도 된다.
- Gradle 명령어로 작업하기
- 실행가능한 jar파일 만들기
gradle jar
---> Build/libs/simpleboard-0.0.1.SNAPSHOT.jar
- 해당 jar 파일을 실행하기
cd build/libs/
jar -jar simpleboard-0.0.1.SNAPSHOT.jar
종료 : ctrl + c
- Spring boot 설정
- jar의 표준이 없다. Spring에서 실행가능한 jar를 만들기 위한 새로운 방법을 만들었다.
스프링 부트 플러그인(maven, gradle)을 이용하여 jar로 만들어야 한다.
- Spring boot에서는 webapp폴더아래에 파일을 작성하지 않는다.
- 정적인 리소스는 src/main/resources/static 폴더에 넣는다.
타임리프 관련된 템플릿은 src/main/resources/templates 폴더에 넣는다.
- Spring Security를 추가한다.
- WebSecurityConfigurerAdapter 를 상속받아서 기능을 확장할 수 있다.
- compile('org.springframework.boot:spring-boot-starter-security')
- 모든 경로를 로그인해야만 접근할 수 있다.
- 기본 사용자가 추가된다. 사용자 id : user, 암호는 부트 애플리케이션이 실행될 때 출력된다.
- Spring Security
- 서블릿 필터는 빈이 아니다. WAS에서 생성해 준다.
- 스프링 컨테이너에는 10개이상의 시큐리티 관련 객체를 가지고 있는데 Spring을 개발한사람은 bean으로 관리되기를 원했다. 그래서 스프링 시큐리티가 제공해주는 필터를 넣어 준다. 이 필터는 스프링 관련 필터이기 때문에 시큐리티 관련 객체를 사용할 수 있다.
- 빈은 컨테이너가 관리하는 것을 말한다.
- 스프링이 빈으로 관리하는 필터가 있다.
- FilterChainProxy를 통해 스프링 빈에서 관리하는 필터를 사용한다.
- Spring Security Filter Chain을 추가 및 교체할 수 있다.
- Spring에서는 설정해야 할 부분이 많다. boot에서는 간단해진다.
- org.springframework.boot.autoconfigure.security.StaticResourceLocation 에 css, javascript, images, webjars, FAVICON 의 path가 정해져있다.
- 로그인을 검사하는 필터가 있다.
- 컨트롤러를 만드는게 아니다.
- path도 정해줘야한다.
- db정보와 검사해주는 객체가 있다.
- 권한(ROLE)을 부여해준다. 사용자아 권한은 1:N 관계
- 사용자가 가려고 했던 path로 이동해준다.
- 정보가 맞으면 세션을 저장해준다.]
- 필터에서 로그인 인증후 브라우저에게 path를 리다이렉트 한다.
- 로그아웃을 검사하는 필터가 있다.
- 컨트롤러를 만드는게 아니다
- 로그아웃후에 이동할 경로가 설정에 있다.
- 필터에서 로그아웃 처리후브라우저에게 path를 리다이렉트 한다.
- Spring Security 옵션
- 설정한 순서대로 옵션이 적용된다.
- AntPathRequestMatcher : Ant관련 path 설정
- permitAll() : 인증을 안하고 아무나 볼 수 있다.
- PathRequest.toStaticResources().atCommonLocations()).permitAll() : static 폴더 안에 폴더 기준에 맞게 파일을 넣고 그 폴더들은 인증을 안한다.(Spring boot에서 제공한다.)
- .anyRequest().fullyAuthenticated() : 등록한 url 인증이 있어야 접근 가능
- hasRole : 해당 롤 권한만 접근 할 수 있다.
- ..antMatchers("/h2-console/**").permitAll().and() .csrf().ignoringAntMatchers("/**") // .ignoringAntMatchers("/h2-console/**") .and().headers().frameOptions().disable() : H2 DB를 사용할때 설정
- .and().logout().permitAll() : 로그아웃은 누구나 접근 가능
- .and().formLogin() : 시큐리티가 제공하는 로그인 폼 사용
- .and().formLogin().loginPage("/uers/login").usernameParameter("id").passwordParameter("password") : 로그인 페이지를 변경하려고 할때 post방식으로 '/uers/login' 으로 input name을 id, password 로 설정하고 보내야한다. (get 방식은으로 요청하면 UI페이지로 가고 post방식으로 요청하면 스프링 시큐리티에게 요청된다.)
- JPA 에서 1:N 관계 설정
- 패러다임 문제 해결 : OOP(객체 모델l)와 관계형 데이터베이스(관계 모델)는 같은 데이터를 표현하고 다루는 방법이 차이가 나는 문제를 해결
- users - user_role 테이블 (1 : N)
- users 테이블에서
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "user_id")
private List<UserRole> roles;
- JSON으로 반환할때 제거하고 보여준다.
@JsonIgnore
private String password;
- pk로 지정하고 자동으로 값을 증가한다. 자동증가를 사용하지 않으면 key가 있는지 select문을 실행하기 때문에 성능이 느리다.
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
- Spring boot 에서 암호화
- 암호화의 종류는 많다. 기본으로는 bcrypt알고리즘을 사용한다.
- PasswordEncoder가 '{암호화종류}암호화한내용' 으로 저장한다.
PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
passwordEncoder.encode(user.getPassword());
- thymeleaf
- th:object= "${객체}" : 객체를 셋팅한다
- th:field= "*{객체의필드명}" : 가져온 객체의 필드를의 값을 가져온다.
- th:action ="@{path} " : contextpath를 path 앞에 붙여준다.
- Hibernate
- 두개의 테이블이 관계를 맺고있을때 insert할떄 FK를 제외하고 insert한다음에 FK의 정보를 업데이트한다.
- Hibernate: insert into users (id, email, name, password, regdate) values (null, ?, ?, ?, ?)
Hibernate: insert into user_roles (id, role_name) values (null, ?)
Hibernate: update user_roles set user_id=? where id=?
- spring data method query
- 메소드 이름은 find로 시작한다.
public User findUserByEmail(String email)
user테이블에서 입력한 이메일에 맞는 조건을 찾는다.( where email = :email)
- Spring Security 인증관련 로직 변경
- Spring boot는 UserDetailsService를 Implement 객체를 이미 가지고 있다.
- 인증관련 로직을 변경 하려면 UserDetailsService를 Implement 하는 클래스를 만들고.
@Componet로 등록한다.
- Principal를 통해 로그인 정보를 출력할 수 있다.
SecurityContextHolder.getContext().getAuthentication() 를 통해서도 출력할수 있다(Thread local로 구현되어 있고 시큐리티가 SecurityContextHolder에 넣어준다.)
- JdbcTokenRepositoryImpl 는 remember me 를 해주는 기능이다.
0 개의 댓글:
댓글 쓰기