[Security] JWT ๊ตฌํ (2) - Security ์ค์ , ๋ฐ์ดํฐ ์ฝ์
by rlaehddnd0422Security ์ค์
@Configuration
@EnableWebSecurity // 1
public class SecurityConfig {
// 2
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests() // 3
.antMatchers("/api/hello").permitAll() // 4
.antMatchers("/api/authenticate").permitAll() // 5
.antMatchers("/api/signup").permitAll() // 6
.anyRequest().authenticated(); // 7
return http.build();
}
}
- SecurityConfig ํด๋์ค๋ฅผ @Configuration์ผ๋ก ์ค์ ํ์ผ๋ก ๋ฑ๋กํ๊ณ , @EnableWebSecurity์ผ๋ก ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ๊ตฌ์ฑ์ ํ์ฑํ ํด์ค๋๋ค.
- Security์์ ์ฌ์ฉํ๋ ํํฐ๋ฅผ customizingํ๊ธฐ ์ํด ๋น์ผ๋ก ๋ฑ๋กํฉ๋๋ค.
- ์๋ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐ๋ ๋ฉ์๋์ ํํด ์ ๊ทผ ๊ถํ์ ์ค์ ํฉ๋๋ค.
- "/api/hello"๋ ์ ๊ทผ ๊ถํ ์ค์ X
- "/api/authenticate"๋ ์ ๊ทผ ๊ถํ ์ค์ X
- "/api/signup"์ ์ ๊ทผ ๊ถํ ์ค์ X
- ๊ทธ ์ธ์ ์์ฒญ์ ํํด์๋ Authentication ์ธ์ฆ ํ์
/api/hello์, ๋ก๊ทธ์ธ ํ์ด์ง, ํ์๊ฐ์ ํ์ด์ง์ ํํด ์ธ์ฆ์์ด ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก, ๊ทธ ์ธ์ API์ ๋ํด์๋ ์ธ์ฆ์ ํด์ผ๋ง ์ ๊ทผํ ์ ์๊ฒ ์ค์ ํด ์ฃผ์์ต๋๋ค.
Entity ์์ฑ
Member.class
@Entity
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Member {
@Id
@Column(name = "member_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String nickname;
private boolean activated;
@ManyToMany
@JoinTable(
name = "member_authority",
joinColumns = {@JoinColumn(name = "member_id", referencedColumnName = "member_id")},
inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "authority_name")})
private Set<Authority> authorities;
}
Authority.class
@Entity
@Table(name = "authority")
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Authority {
@Id
@Column(name = "authority_name", length = 50)
private String authorityName;
}
- Member (*) โก๏ธ Authority (*) : ๋ค๋๋ค ๊ด๊ณ ๋งคํ by JoinTable
DataSource / JPA ์ค์
DataSource ์ค์
applciation.yml์ DataSource๋ฅผ ์ง์ ํด์ค์๋ค.
server:
port: 8080
servlet:
context-path: /
encoding:
charset: UTF-8
enabled: true
force: true
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:tcp://localhost/~/jwtserver
username: sa
password:
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
# hbm2ddl-auto: create #create update none
ddl-auto: create-drop
properties:
hibernate:
show_sql: true
application.properties
JPA ์ค์
insert into member (username, password, nickname, activated) values ('admin', '$2a$08$lDnHPz7eUkSi6ao14Twuau08mzhWrL4kyZGGU5xfiGALO/Vxd5DOi', 'admin', 1);
insert into member (username, password, nickname, activated) values ('user', '$2a$08$UkVvwpULis18S19S5pZFn.YHPZt3oaqHZnDwqbCW9pft6uFtkXKDC', 'user', 1);
insert into authority (authority_name) values ('ROLE_USER');
insert into authority (authority_name) values ('ROLE_ADMIN');
insert into member_authority (member_id, authority_name) values (1, 'ROLE_USER');
insert into member_authority (member_id, authority_name) values (1, 'ROLE_ADMIN');
insert into member_authority (member_id, authority_name) values (2, 'ROLE_USER');
- ํ์ฌ ์ค์ ์ด ddl-auto: create-drop ์ผ๋ก ๋์ด์์ผ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ง์ฐ๊ฒ ๋๋๋ฐ, ํธ์๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฅผ ์์ฑํด๋๊ณ ์คํ๋ ๋๋ง๋ค ์ถ๊ฐํ ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค.
์๋ฒ ์คํ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ
ํ ์ด๋ธ์ด ์ ์์ฑ๋์๊ณ ๋ฐ์ดํฐ๋ ์ ์ฝ์ ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด์ ์ด๊ธฐ ์ค์ ์ด ๋ชจ๋ ๋๋ฌ์ต๋๋ค. ๋ค์ ํฌ์คํ ์์๋ ๋ณธ๊ฒฉ์ ์ผ๋ก JWT๋ฅผ ๋์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend > Spring Security' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422