Skip to content

Commit a3d482d

Browse files
authored
Merge pull request #26 from enjoy-hack/Daeun
[Feat] 세종대학교 포털 로그인 기능 구현
2 parents 8eac30d + c99857d commit a3d482d

File tree

7 files changed

+278
-106
lines changed

7 files changed

+278
-106
lines changed

build.gradle

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,6 @@ configurations {
2222

2323
repositories {
2424
mavenCentral()
25-
maven {
26-
name = 'chuseok22NexusRelease'
27-
url = uri('https://nexus.chuseok22.com/repository/maven-releases/')
28-
metadataSources {
29-
mavenPom()
30-
artifact()
31-
}
32-
}
3325
}
3426

3527
dependencies {
@@ -40,9 +32,16 @@ dependencies {
4032
implementation 'org.springframework.boot:spring-boot-starter-actuator'
4133
compileOnly 'org.projectlombok:lombok'
4234
runtimeOnly 'com.mysql:mysql-connector-j:8.0.33'
43-
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
44-
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
45-
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
35+
36+
//Http
37+
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
38+
implementation 'org.jsoup:jsoup:1.15.3'
39+
40+
//JavaNetCookieJar
41+
implementation 'com.squareup.okhttp3:okhttp-urlconnection:4.9.3'
42+
//HttpLogginInterceptor
43+
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'
44+
4645
annotationProcessor 'org.projectlombok:lombok'
4746
testImplementation 'org.springframework.boot:spring-boot-starter-test'
4847
testImplementation 'org.springframework.security:spring-security-test'
@@ -57,16 +56,10 @@ dependencies {
5756

5857
implementation 'org.springframework.cloud:spring-cloud-starter-aws-messaging:2.2.6.RELEASE'
5958

60-
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
61-
implementation 'com.squareup.okhttp3:okhttp-urlconnection:4.11.0' // 추가
62-
// Jsoup (HTML 파싱)
63-
implementation 'org.jsoup:jsoup:1.18.1'
64-
6559
developmentOnly 'org.springframework.boot:spring-boot-devtools'
66-
annotationProcessor 'org.projectlombok:lombok'
6760
testImplementation 'org.springframework.boot:spring-boot-starter-test'
6861
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
69-
implementation 'com.chuseok22:sejong-portal-login:1.0.0'
62+
7063
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
7164

7265
implementation 'org.apache.poi:poi-ooxml:5.2.3'

src/main/java/com/example/enjoy/controller/LoginController.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import com.example.enjoy.dto.loginDto.MemberCommand;
44
import com.example.enjoy.dto.loginDto.MemberDto;
5-
import com.example.enjoy.service.loginService.SejongLoginService;
5+
import com.example.enjoy.dto.loginDto.SejongMemberInfo;
6+
import com.example.enjoy.service.loginService.SejongPortalLoginService;
67
import io.swagger.v3.oas.annotations.tags.Tag;
78
import jakarta.validation.Valid;
89
import lombok.AllArgsConstructor;
@@ -19,23 +20,16 @@
1920
@AllArgsConstructor
2021
@RequestMapping("/api/auth/sejong")
2122
public class LoginController {
22-
private final SejongLoginService sejongLoginService;
23+
private final SejongPortalLoginService sejongLoginService;
2324

2425
/**
2526
* 세종대학교 포털 로그인 및 사용자 정보 조회
2627
* 포털 로그인 -> 고전독서 사이트 SSO 인증 -> 사용자 정보 파싱 및 반환
2728
*/
28-
@PostMapping("/login")
29-
public ResponseEntity<MemberDto> loginAndGetUserInfo(@RequestBody @Valid MemberCommand command) {
30-
try {
31-
log.info("세종대 포털 로그인 요청: {}", command.getSejongPortalId());
32-
MemberDto memberInfo = sejongLoginService.login(command);
33-
log.info("사용자 정보 조회 성공: {}", memberInfo.getStudentName());
34-
return ResponseEntity.ok(memberInfo);
35-
} catch (Exception e) {
36-
log.error("세종대 포털 로그인 및 정보 조회 실패: {}", e.getMessage(), e);
37-
throw new RuntimeException("세종대 포털 인증 실패", e);
38-
}
29+
@PostMapping
30+
public ResponseEntity<SejongMemberInfo> login(@RequestBody MemberCommand command) {
31+
log.info("세종대 포털 로그인 시도: {}", command.getSejongPortalId());
32+
return ResponseEntity.ok(sejongLoginService.getMemberAuthInfos(command));
3933
}
4034

4135
}

src/main/java/com/example/enjoy/controller/UserController.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
import com.example.enjoy.dto.StudentCourseStatus;
66
import com.example.enjoy.dto.loginDto.MemberCommand;
77
import com.example.enjoy.dto.loginDto.MemberDto;
8+
import com.example.enjoy.dto.loginDto.SejongMemberInfo;
89
import com.example.enjoy.entity.StudentCourse;
910
import com.example.enjoy.entity.Track;
10-
import com.example.enjoy.service.loginService.SejongLoginService;
11+
import com.example.enjoy.service.loginService.SejongPortalLoginService;
1112
import com.example.enjoy.service.userService.UserService;
1213
import io.swagger.v3.oas.annotations.Operation;
1314
import jakarta.validation.Valid;
@@ -23,19 +24,20 @@
2324
@RequestMapping("/api/student")
2425
public class UserController {
2526

26-
private final SejongLoginService sejongLoginService;
27+
private final SejongPortalLoginService sejongLoginService;
2728
private final UserService userService;
2829

29-
public UserController(SejongLoginService sejongLoginService, UserService userService) {
30+
public UserController(SejongPortalLoginService sejongLoginService, UserService userService) {
3031
this.sejongLoginService = sejongLoginService;
3132
this.userService = userService;
3233
}
3334

3435
@Operation(summary = "학생 정보 조회", description = "세종대학교 포털 인증을 통해 학생 정보를 조회합니다.")
3536
@PostMapping("/detail")
3637
public ResponseEntity<MemberDto> getStudentDetail(@RequestBody MemberCommand command) throws IOException {
37-
MemberDto memberInfo = sejongLoginService.getMemberAuthInfos(command);
38-
return ResponseEntity.ok(memberInfo);
38+
SejongMemberInfo memberInfo = sejongLoginService.getMemberAuthInfos(command);
39+
MemberDto dto = MemberDto.fromSejongMemberInfo(memberInfo);
40+
return ResponseEntity.ok(dto);
3941
}
4042

4143
@Operation(summary = "수동 과목 등록", description = "학생이 직접 수강한 과목을 등록합니다.")

src/main/java/com/example/enjoy/dto/loginDto/MemberDto.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,15 @@ public class MemberDto {
1212
private String grade;
1313
private String completedSemester;
1414
private boolean hasLoginHistory; // 로그인 이력 여부
15+
16+
public static MemberDto fromSejongMemberInfo(SejongMemberInfo sejongMemberInfo){
17+
return new MemberDto(
18+
sejongMemberInfo.getMajor()
19+
, sejongMemberInfo.getStudentId()
20+
, sejongMemberInfo.getName()
21+
, sejongMemberInfo.getGrade()
22+
, sejongMemberInfo.getCompletedSemester()
23+
, false // 기본값으로 false 설정
24+
);
25+
}
1526
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.example.enjoy.dto.loginDto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
import lombok.ToString;
6+
7+
@Builder
8+
@Getter
9+
@ToString
10+
public class SejongMemberInfo {
11+
private String major;
12+
private String name;
13+
private String studentId;
14+
private String grade;
15+
private String status;
16+
private String completedSemester;
17+
}

src/main/java/com/example/enjoy/service/loginService/SejongLoginService.java

Lines changed: 0 additions & 70 deletions
This file was deleted.

0 commit comments

Comments
 (0)