Skip to content

Commit 2486245

Browse files
committed
#4 로그인 권한 추가 및 시큐리티 수정
작동은 하지만 아직도 토큰을 발급 받은 상태에서 액션 메소드를 호출할때 인가 에러가 발생함
1 parent bb3475a commit 2486245

File tree

8 files changed

+34
-37
lines changed

8 files changed

+34
-37
lines changed

src/main/java/vigo/com/viewgorithm/config/SecurityConfig.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
package vigo.com.viewgorithm.config;
2-
32
import lombok.RequiredArgsConstructor;
43
import org.springframework.context.annotation.Bean;
54
import org.springframework.context.annotation.Configuration;
@@ -13,26 +12,22 @@
1312
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
1413
import vigo.com.viewgorithm.user.jwt.JwtTokenProvider;
1514
import vigo.com.viewgorithm.user.jwt.JwtAuthenticationFilter;
16-
1715
@Configuration
1816
@EnableWebSecurity
1917
@RequiredArgsConstructor
20-
2118
public class SecurityConfig {
22-
2319
//AuthenticationManager가 인자로 받을 AuthenticationConfiguraion 객체 생성자 주입
2420
private final AuthenticationConfiguration authenticationConfiguration;
2521
private final JwtTokenProvider jwtTokenProvider;
26-
2722
@Bean
2823
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
29-
3024
return configuration.getAuthenticationManager();
3125
}
3226

3327
@Bean
3428
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
3529
// csrf disable => csrf protect disable
30+
3631
http
3732
.csrf(AbstractHttpConfigurer::disable)
3833
// form 로그인 방식 disable
@@ -52,4 +47,4 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
5247
.sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
5348
return http.build();
5449
}
55-
}
50+
}

src/main/java/vigo/com/viewgorithm/user/join/api/dto/UserDto.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import lombok.Builder;
55
import lombok.Data;
6+
import vigo.com.viewgorithm.user.join.domain.Role;
7+
68
import java.util.Date;
79

810
@Data
@@ -16,7 +18,7 @@ public class UserDto {
1618
private String email;
1719
private Date createdAt;
1820

19-
// role 을 위한 userType
20-
private String userType;
21+
// Role
22+
private Role role;
2123

2224
}

src/main/java/vigo/com/viewgorithm/user/join/domain/CustomUserDetails.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,56 +10,47 @@
1010
public class CustomUserDetails implements UserDetails {
1111

1212
private final User userEntity;
13-
// 생성자
13+
1414
public CustomUserDetails(User userEntity) {
1515
this.userEntity = userEntity;
1616
}
17-
// getAuthorities = 사용자 권한 반환하는 인터페이스 함수
1817

1918
@Override
2019
public Collection<? extends GrantedAuthority> getAuthorities() {
2120
Collection<GrantedAuthority> authorities = new ArrayList<>();
22-
// ArrayList 를 사용하여 권한을 저장하는 collection
21+
authorities.add(() -> "ROLE_USER");
2322

24-
// 사용자 권한 설정
25-
switch (userEntity.getUserType()) {
26-
case "user":
27-
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
28-
break;
29-
case "admin":
30-
authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
31-
break;
32-
}
23+
// System.out.println(authorities);
3324
return authorities;
3425
}
3526

3627
@Override
3728
public String getPassword() {
38-
return null;
29+
return userEntity.getPassword();
3930
}
4031

4132
@Override
4233
public String getUsername() {
43-
return null;
34+
return userEntity.getUsername();
4435
}
4536

4637
@Override
4738
public boolean isAccountNonExpired() {
48-
return false;
39+
return true; // 사용자 계정 만료 여부
4940
}
5041

5142
@Override
5243
public boolean isAccountNonLocked() {
53-
return false;
44+
return true; // 사용자 계정 잠김 여부
5445
}
5546

5647
@Override
5748
public boolean isCredentialsNonExpired() {
58-
return false;
49+
return true; // 사용자 자격 증명 만료 여부
5950
}
6051

6152
@Override
6253
public boolean isEnabled() {
63-
return false;
54+
return true; // 사용자 활성화 여부
6455
}
6556
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package vigo.com.viewgorithm.user.join.domain;
2+
3+
4+
import lombok.Getter;
5+
import lombok.RequiredArgsConstructor;
6+
7+
@Getter
8+
@RequiredArgsConstructor
9+
public enum Role {
10+
ROLE_USER
11+
}

src/main/java/vigo/com/viewgorithm/user/join/domain/User.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,10 @@ public class User implements UserDetails {
4040
@Temporal(TemporalType.TIMESTAMP)
4141
private Date createdAt;
4242

43-
@Column(name="user_type")
44-
private String userType;
43+
@Enumerated(EnumType.STRING)
44+
private Role role;
4545

4646

47-
// @Enumerated(EnumType.STRING)
48-
// private Authority authority;
4947

5048
@PrePersist
5149
protected void onCreate() {

src/main/java/vigo/com/viewgorithm/user/join/service/JoinService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import lombok.extern.slf4j.Slf4j;
55
import org.springframework.stereotype.Service;
66
import org.springframework.transaction.annotation.Transactional;
7+
import vigo.com.viewgorithm.user.join.domain.Role;
78
import vigo.com.viewgorithm.user.join.domain.User;
89
import vigo.com.viewgorithm.user.join.api.dto.UserDto;
910
import vigo.com.viewgorithm.user.join.domain.repository.UserRepository;
@@ -30,6 +31,7 @@ public String userJoin(UserDto userDto) {
3031
.sex(userDto.getSex())
3132
.email(userDto.getEmail())
3233
.createdAt(userDto.getCreatedAt())
34+
.role(Role.ROLE_USER)
3335
.build();
3436
// save
3537
userRepository.save(user);

src/main/java/vigo/com/viewgorithm/user/jwt/JwtTokenProvider.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public JwtDto generateToken(Authentication authentication) {
4444
Date accessTokenExpiresIn = new Date(now + 86400000);
4545
String accessToken = Jwts.builder()
4646
.setSubject(authentication.getName())
47-
.claim("user", authorities)
47+
.claim("auth", authorities)
4848
.setExpiration(accessTokenExpiresIn)
4949
.signWith(key, SignatureAlgorithm.HS256)
5050
.compact();
@@ -67,16 +67,15 @@ public Authentication getAuthentication(String accessToken) {
6767
// Jwt 토큰 복호화
6868
Claims claims = parseClaims(accessToken);
6969

70-
if (claims.get("user") == null) {
70+
if (claims.get("auth") == null) {
7171
throw new RuntimeException("권한 정보가 없는 토큰입니다.");
7272
}
7373

7474
// 클레임에서 권한 정보 가져오기
75-
Collection<? extends GrantedAuthority> authorities = Arrays.stream(claims.get("user").toString().split(","))
75+
Collection<? extends GrantedAuthority> authorities = Arrays.stream(claims.get("auth").toString().split(","))
7676
.map(SimpleGrantedAuthority::new)
7777
.collect(Collectors.toList());
7878

79-
8079
// UserDetails 객체를 만들어서 Authentication return
8180
// UserDetails: interface, User: UserDetails를 구현한 class
8281
UserDetails principal = new User(claims.getSubject(), "", authorities);

src/main/resources/data.sql

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ insert into algorithm_category (algorithm_name, category_name)
1010
values ("Quick", "Sort");
1111

1212
-- 로그인 Test (유저 아이디 insert문)
13-
insert into user (birth,created_at ,email,name,password,sex,user_id, user_type)
14-
values("1999-08-06",now(),"kuntek1953@naver.com", "이건택", "1111", "M", "kuntek1953", "user");
13+
1514

1615

1716

0 commit comments

Comments
 (0)