728x90

Linkbird 문서 관리자 : 김예림 (kimyerimweb@gmail.com 혹은 y_rzzz@naver.com)


📗 기술스택

  • SpringBoot
  • JPA
  • MySQL
  • AWS EC2
  • OAuth2
  • JWT

📘 역할 분담

신동철 : Login

박세훈 : Link


이외 기능은 차후 결정 및 분배


🙏🏻 규칙

  • 커밋 메시지 컨벤션

    전체 모든 단어를 소문자로 + 문장 첫 동사는 대문자로 작성합니다.

    • Feat : HTML마크업, 함수 작성, 컴포넌트 작성할 때
    • Docs : readme 작성했을 때
    • Fix : 제 기능을 안하는 버그를 잡았을 때
    • Refactor : 기능은 동작하는데 아쉬운 코드 개선
    • Config : 설정파일추가,업데이트
    • Design : CSS, CSS만 이용해서 UX 향상
    • Style : eslint, 프리티어 설정으로 코드 포맷, 세미콜론, 따옴표 변경 시
    • Rename : 파일이나 폴더 이름 변경, 경로 이동
    • Remove : 파일 삭제
  • Git 전략
  • Pull Request template
  • Issue template
  • 클래스 작명 규칙

🗂 프로젝트 구조

  • 패키지 구조
    📦com  ┣ 📂team  ┃ ┣ 📂link  ┃ ┃ ┣ 📜link.java  ┃ ┃ ┣ 📂user  ┃ ┃ ┃ ┣ 📜java 파일들  ┃ ┃ ┃ ┣ 📜dto  ┃ ┃ ┃ ┣ 📜dao  ┃ ┃ ┃ ┣ 📜controller  ┃ ┃ ┃ ┣ 📜service  ┃ ┃ ┃ ┗ 📜exception  ┃ ┃ ┣ 📂login  ┃ ┃ ┃ ┣ 📜dto  ┃ ┃ ┃ ┣ 📜dao  ┃ ┃ ┃ ┣ 📜controller  ┃ ┃ ┃ ┣ 📜service  ┃ ┃ ┃ ┗ 📜exception  ┃ ┃ ┣ 📂link  ┃ ┃ ┃ ┣ 📜dto  ┃ ┃ ┃ ┣ 📜dao  ┃ ┃ ┃ ┣ 📜controller  ┃ ┃ ┃ ┣ 📜service  ┃ ┃ ┃ ┗ 📜exception  ┃ ┃ ┣ 📂link  ┃ ┃ ┃ ┣ 📜dto  ┃ ┃ ┃ ┣ 📜dao  ┃ ┃ ┃ ┣ 📜controller  ┃ ┃ ┃ ┣ 📜service  ┃ ┃ ┃ ┗ 📜exception  ┃ ┃ ┣ 📂link  ┃ ┃ ┃ ┣ 📜dto  ┃ ┃ ┃ ┣ 📜dao  ┃ ┃ ┃ ┣ 📜controller  ┃ ┃ ┃ ┣ 📜service  ┃ ┃ ┃ ┗ 📜exception  ┃ ┃ ┣ 📂alarm  ┃ ┃ ┃ ┣ 📜dto  ┃ ┃ ┃ ┣ 📜dao  ┃ ┃ ┃ ┣ 📜controller  ┃ ┃ ┃ ┣ 📜service  ┃ ┃ ┃ ┗ 📜exception  ┃ ┃ ┣ 📂link  ┃ ┃ ┃ ┗ 📜LoginFilter.java  ┃ ┃ ┣ 📂common  ┃ ┃ ┃ ┣ 📜Utility.java  ┃ ┃ ┃ ┣ 📜ErrorMessage.java //Enum  ┃ ┃ ┃ ┗ 📜WebConfig.java // 필터등록 클래스파일  ┃ ┃ ┣ 📂resources  ┃ ┃ ┃ ┣ 📜application.properties  ┗ ┗ ┗ ┗ 📜logback.xml

🛠 트러블 슈팅 기록


회의록

 

 

https://www.notion.so/cf0c05d9976c43b19c719a0592a03a2e

728x90

저장소

 

  • Working Directory
  • Staging area
  • repository
  • remote repository

 

기본 명령어

 

git init .git 이 생성되어 버전 관리의 시작
git add 파일명 Working Directory -> Staging area
git commit [-m | -am] "메세지이름"
-m 옵션 : 메세지 이름만 적기
-am 옵션 : git add 와 git commit -m 동시에 수행 하기
Staging area -> repository
git push 저장소명 브랜치명 repository -> remote repository

 

저장소 되돌리기

 

HEAD^^  가장 최근 커밋부터 두개 되돌리는 것
git reset --hard HEAD^ Working Directory , Staging area  , Repository 의 가장 최근 부분이 사라지고 , 
Repository 의 head는 두번째 커밋이 된다 ,
이때 현재 작업공간은 두번째 커밋내용으로 변경되며
up-to-date(최신) 상태가 된다.
git reset (--mixed) HEAD^ <default>  Staging area  , Repository 의 가장 최근 부분이 사라지고 ,
Repository 의 head는 두번째 커밋이 된다 , 이때 작업공간은 영향을 받지 않고 그대로 있는다.
git reset --soft HEAD^ Repository 의 가장 최근 부분이 사라지고 ,
Repository 의 head는 두번째 커밋이 된다 , 이때 작업공간과 Staging  area  는 영향을 받지 않고 그대로 있는다.

그외 알아두면 유용한 명령어들..

git diff , git revert 

 

Repository끼리의 상호작용 종류

 

 

git remote (-v) 원격저장소 조회,추가.삭제하기.
내 로컬 Repository와 상호작용하고 있는 원격 저장소들의 목록을 조회
-v 옵션 : 단축이름과 URL 같이 보여줌

git remote add origin URL.git 내 로컬과 상호작용하는 원격저장소로 , origin(단축이름) 이라는 원격저장소 명칭으로 정하여 URL을 원격저장소로 등록하기
git remote rm origin 내 로컬에 등록된 origin(단축이름) 이라는 원격저장소를 제거한다  

 

git push -u origin master 원격저장소에 밀어넣기.
나의 로컬 디렉토리의 master 브랜치를 origin의 master브랜치로 푸쉬하는 것
-u 옵션 : git push -u origin master 로 해주면 , 이후에 origin master 부분을 생략해도 디폴트로 적용됨

git pull (origin master) 
< -u 옵션이 이전에 사용 되었다면 origin master는 생략가능 >
원격저정소 갖고 와서 합치기.
원격 저장소 origin을 내 로컬 저장소의 master 브랜치로 갖고와서 덮어 씌우는 것(동기화,merge)

git fetch origin 원격저장소 일단 갖고만 오기.
origin저장소에 있는 것을 내 로컬저장소로 가져만 오는 것이다.
git pull은 merge 되어 내 작업공간이 사라지지만 , git fetch는 merge 되지 않고 일단 가져만 오는 것이고 , 로컬 저장소에서 영향을 받지는 않는다.
fetch로 가져온 내용은  [origin/master | FETCH_HEAD ] 브랜치에서 확인이 가능하다.

git checkout origin/master 브랜치 변경하기.
현재 브랜치를 origin/master 브랜치로 변경하기
git clone url.git 원격저장소 복사하기.
url 에 있는 원격 저장소 내용을 현재 디렉토리에 복사해오기 , 자동으로 원격저장소가 등록되어 origin역시 자동 생성 된다.

 

브랜치

 

git branch 브랜치종류, 현재브랜치 확인
git branch newbranch newbranch라는 새로운 브랜치 생성
git checkout -b newbranch2 newbranch2라는 새로운 브랜치를 만듬과 동시에 브랜치변경
git branch -D newbranch newbranch 삭제

 

협업시 발생할 수 있는 이슈들

'GIT' 카테고리의 다른 글

branch 삭제 불가능할경우  (0) 2021.09.06
GIT - git pull 시 에러  (0) 2021.05.12
GIT - STS(eclipse)프로젝트로 협업시 gitignore 설정  (0) 2021.05.09
GIT - Git 구성도 및 Git Bash 명령어  (0) 2021.05.09
GIT-명령어,개념정리  (0) 2021.04.27
728x90

Execution failed for task ':test'.
> No tests found for given includes: [StringTest$Test3](filter.includeTestsMatching)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

이라는 에러 발생.

 

Settings -> Build,Execution,Deployment -> Gradle -> Run tests using -> From Gradle to IntelliJ IDEA 로 변경

*해결*

 

 

참고 : intellij idea - Intelij 2019.1 update breaks JUnit tests - Stack Overflow

'21년이전 > 웹_' 카테고리의 다른 글

JUNIT 정리  (0) 2021.09.06
SPRING - Logback 사용하기  (0) 2021.07.29
Spring - 컨트롤러가 두번 호출되는 문제  (0) 2021.07.29
Spring security 적용  (0) 2021.07.28
MVN Repository  (0) 2021.07.26
728x90


***Junit5

*******************************************************Annotation

@BeforeAll,@AfterAll : 클래스에 있는 모든 메소드를 수행할 때 ,
메소드 수행전 , 후에 수행될 어노테이션이다.
@AfterEach,@BeforeEach : 특정 메소드가 시작되기 후, 전 마다 수행되는 어노테이션
@AfterEach : 다음 테스트에 영향을 주지 않기 위해 종료되어야할 리소스를 처리하는 부분
@BeforeEach : 테스트 할 때의 초기 환경을 setup
@Test : Junit이 수행할 코드 ,메소드에 붙음
@Nested : 연관 테스트 함수를 묶어주고 , 중첩테스트클래스임을 나타내줌 (클래스 레밸)

@RepeatedTest : value 속성에 지정된 수 만큼 반복 ,name 속성에 {displayName} {currentRepetition} {totalRepetitions} 가 함께 쓰일 수 있음
@DisplayName : 테스트 이름 설정 ( 클래스 , 메소드 레밸 이며 주로 @Nested와 같이 쓰임 )

@DisplayName 사용이유

  • 메소드명을 한글로 작성해도 언더바를 작성해야 해서 가독성이 좋지 않음
  • @Nested 와 함께 쓰려면 클래스를 작성해야 하는데 @DisplayName 을 쓰는게 깔끔
  • JUnit 개발자들은 영어가 모국어 수준일텐데도 @DisplayName 어노테이션을 추가했다는 점

@ParameterizedTest : 하나의 테스트 메소드로 여러 개의 파라미터에 대해서 테스트할 수 있습니다.

name 속성을 이용하여 파라미터를 받는 메소드들에게 이름을 지정해 줄 수 있습니다.

name속성 내부에 , {index}는 1부터 시작되며 1씩증가

{arguments}는 모든 파라미터들을 출력

{0}은 첫번째 인수 , {1}은 두번째 인수 , ....
@ValueSource : 리터럴 값의 단일 배열을 지정할 수 있으며 매개 변수화 된 테스트 호출마다 단일 인수를 제공하는 데만 사용할 수 있습니다. @ParameterizedTest 와 함께 쓰임
@CsvSource : ValueSource의 확장판 ,여러 인자를 delimeter(구분자)로 구분해서 넘겨줌.

@ParameterizedTest 와 함께 쓰임

@NullSource @EmptySource : @NullSource @EmptySource 를 사용하면 파라미터 값으로 null과 empty를 넣어줍니다.

@ParameterizedTest 와 함께 쓰임

@NullAndEmptySource : null과 빈 공백을 파라미터값으로 넣어줍니다.

@ParameterizedTest 와 함께 쓰임

 

example1)  ValueSource 인수로써 문자열은 strings 로 , 정수형은 ints 형으로 하고 , method의 인자인 name으로 하나씩 들어감

 @ParameterizedTest
 @ValueSource(strings = {"q", "qwerasdfzxcv", "qq23"})
 void method(String name){

     ~

 }

 

example2) CsvSource 의 두번째 문자열내부의 tEst 와 test 이  method 인자의 input, expected에 각각 들어감

@ParameterizedTest
@CsvSource(value = {"test:test", "tEst:test", "Java:java"}, delimiter = ':')
void method(String input, String expected) {
    String actualValue = input.toLowerCase();
    assertEquals(expected, actualValue);
}


*******************************************************method


assertThat :
대부분의 경우 , 메서드 체이닝할 수 있어서 기존 assertXXX 메서드보다 더 많은 유연성을 제공.
예를 보자.

contains : 중복여부, 순서에 관계 없이 값만 일치하면 성공(expected가 actual에 포함되기만 하면 성공)

example) contains 예제
List<Integer> list = Arrays.asList(1, 2, 3);

// Success: 모든 원소를 입력하지 않아도 성공
assertThat(list).contains(1, 2);

// Success: 중복된 값이 있어도 포함만 되어 있으면 성공
assertThat(list).contains(1, 2, 2);

// Success: 순서가 바뀌어도 값만 맞으면 성공
assertThat(list).contains(3, 2);

// Fail: List 에 없는 값을 입력하면 실패
assertThat(list).contains(1, 2, 3, 4);

containsOnly : 순서,중복를 무시하는 대신 원소값과 갯수가 정확히 일치

containsExactly : 중복없어야 하고 , 순서를 포함해서 정확히 일치

assertThatThrownBy : 예외처리를 가독성 있게 테스트할 수 있는 함수제공.
assertThatThrownBy(() -> { 예외발생; }).isInstanceOf(예외종류.class)
.hasMessageContaining(예외문구);

assertThatExceptionOfType : assertThatThrownBy 와 비슷하다.

isEqualTo : actual 와 expected가 동일하면 통과
example)
assertThat(actual).isEqualTo(expected)

legacy assert 메소드

메소드 설명
assertEquals(x, y)  객체 x와 y가 일치함을 확인합니다.
·         x(예상 값)와 y(실제 값)가 같으면 테스트 통과
assertArrayEquals(a, b) 배열 A와 B가 일치함을 확인합니다.
assertFalse(x) x가 false 인지 확인합니다.
assertTrue(x)  x가 true 인지 확인합니다.
assertTrue(message, condition) condition이  true이면 message표시
assertNull(o)  객체o가 null인지 확인합니다.
assertNotNull(o) 객체o가 null이 아닌지 확인합니다.
assertSame(ox, oy) 객체 ox와 oy가 같은 객체임을 확인합니다.
·         ox와 oy가 같은 객체를 참조하고 있으면 테스트 통과
·         assertEquals()메서드는 두 객체의 이 같은지 확인하고, assertSame()메서드는 두 객체의 레퍼런스가 동일한가를 확인합니다. (== 연산자)
assertNotSame(ox, oy) ox와 oy가 같은 객체를 참조하고 있지 않으면 통과
assertfail() 테스트를 바로 실패처리






참고 : https://sas-study.tistory.com/314
https://jongmin92.github.io/2020/03/31/Java/use-assertthat/ (assertThat)
https://bcp0109.tistory.com/317 ( containsXXX)
https://bcp0109.tistory.com/297 ( @Nested , @DisplayName )

JUnit 5 알아보기 (tistory.com) ( @Nested )
https://pjh3749.tistory.com/m/241 ,
https://velog.io/@new_wisdom/assertJ-%EA%B3%B5%EC%8B%9D%EB%AC%B8%EC%84%9C%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-assertJ-%EC%A0%95%EB%A6%AC 

( assertThatThrownBy , assertThatExceptionOfType)
https://pjh3749.tistory.com/241 ( isEqualTo )

https://dublin-java.tistory.com/56 ( @ParameterizedTest , @ValueSource , @NullAndEmptySource)

https://velog.io/@max9106/JUnit5-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%98%EB%B3%B5-%ED%95%98%EA%B8%B0

https://www.baeldung.com/parameterized-tests-junit-5 ( @CsvSource )

https://beomseok95.tistory.com/205 ( assert 메소드모음 )

JUnit 5 Parameterized Tests 사용하기 (tistory.com) @NullSource @EmptySource
https://effortguy.tistory.com/116 (RepeatedTest)

'21년이전 > 웹_' 카테고리의 다른 글

테스트오류 문제 - No tests found for given includes  (0) 2021.09.07
SPRING - Logback 사용하기  (0) 2021.07.29
Spring - 컨트롤러가 두번 호출되는 문제  (0) 2021.07.29
Spring security 적용  (0) 2021.07.28
MVN Repository  (0) 2021.07.26
728x90

$ git branch -d step1
error: Cannot delete branch 'step1' checked out at 'C:/Users/joins/java-racingcar'

 

다음과 같은 에러가 발생하였다

 

이는 현재 브랜치가 삭제하고자 하는 브랜치 이기 때문에 

현재 브랜치를 변경해주어야 한다.

 

git checkout shin.dongcheul

git branch -d 삭제하고자하는 브랜치명

'GIT' 카테고리의 다른 글

Git - 협업과정  (0) 2021.09.12
GIT - git pull 시 에러  (0) 2021.05.12
GIT - STS(eclipse)프로젝트로 협업시 gitignore 설정  (0) 2021.05.09
GIT - Git 구성도 및 Git Bash 명령어  (0) 2021.05.09
GIT-명령어,개념정리  (0) 2021.04.27
728x90

레거시로 Log4J 를 많이 이용했었지만 , 
대체 Logger들이 많아졌음
스프링은 기본적으로 , commons.logging(jcl) (legacy) 라이브러리이용

 

상관도

jcl , SLF4J : 로그 인터페이스 

log4j : jcl 의 구현체

Logback : SLF4J의 구현체


내가 이용하고자 하는 Logback(SLF4J구현)라이브러리
-commons-logging 라이브러리를 제외 시켜야 함
-commons-logging 가 제외되면 ,기존 jcl을 통해 로그를 남기던
코드들은 에러 발생하는데 , jcl-over-slf4j라이브러리가 Log4j(jcl)와 SLF4J을 이어주는 징검다리 역할을 하여 출력시킴
- logback-classic 라이브러리가 로그를 남기게된다

 

필요한 dependencies

*jcl-over-slf4j

*logback-classic

 

로그정보

로그 순위 (오른쪽일 수록 심각) : trace debug info warn error  

에를들어 , 프로젝트 로그 레밸을 info 로 지정하였다면 , 로그 출력은 info warn error 

 

 

 

참고 : https://victorydntmd.tistory.com/173 

상세한 설명 : https://goddaehee.tistory.com/45 

'21년이전 > 웹_' 카테고리의 다른 글

테스트오류 문제 - No tests found for given includes  (0) 2021.09.07
JUNIT 정리  (0) 2021.09.06
Spring - 컨트롤러가 두번 호출되는 문제  (0) 2021.07.29
Spring security 적용  (0) 2021.07.28
MVN Repository  (0) 2021.07.26
728x90

view 에서, <link rel="shortcut icon" href="#"> 처럼 태그에 빈 값이 걸려있으면 두 번 돌아간다.

 

해당 태그를 삭제해주거나 값을 넣어주면 해결된다

'21년이전 > 웹_' 카테고리의 다른 글

테스트오류 문제 - No tests found for given includes  (0) 2021.09.07
JUNIT 정리  (0) 2021.09.06
SPRING - Logback 사용하기  (0) 2021.07.29
Spring security 적용  (0) 2021.07.28
MVN Repository  (0) 2021.07.26
728x90

본인은 Spring security 3.1.7 을 사용하였고 , 

Security 를 적용하기전에 , 공부하면서 정리해 보았다

 

21/07/28 )

본인은 기본 세션과 쿠키를 이용하여 로그인처리, 로그인 유지를 프로그래밍 하였으나 ,

시큐리티를 적용하여 마이그레이션 해보고자 함

 

내 플젝의 요구사항

  1.  url 에 접근권한 설정
  2. 로그인 권한이 필요한 url로 이동할 시 , 로그인페이지로 이동후 로그온되면 , 다시 첫 url로 이동
  3.  사용자에 의하여 로그인 페이지로 이동후 로그인 시 , 메인페이지로 이동
  4. 로그인 유지기능을 remember me 이용하여서 구현
  5. jsp 파일에서 로그인정보를 가져올 경우엔 , security taglib 이용하여 정보 획득하기
  6. 로그아웃 구현

2.  로그인 권한이 필요한 url로 이동할 시 , 로그인페이지로 이동후 로그온되면 , 다시 첫 url로 이동

(사용자의 요청을 저장하고 꺼내올수 있는)RequestCache 인터페이스를 이용하여

사용자 요청 정보들이 들어 있는 SavedRequest 클래스 객체를 세션에 저장

로그인화면을 보기전에 방문했던 URL을 가져오기

 

5 . jsp 파일에서 로그인정보를 가져올 경우엔 , security taglib 이용하여 정보 획득하기

( pom 에 등록한 spring-security-taglibs 이용하여 jsp 에서 세션 바로 이용)

로그인 성공 -> Authentication에 자동으로 사용자 정보 담김 -> .jsp 파일내 taglib 를 이용하여 세션 정보 도출

 

<sec:authentication property="name" var="Session_userID"/> 을 이용하여 시큐리티 이전에 사용하였던 세션 아이디를 이용함

 

class 에선

Authentication authentication
String Session_userID=(String)authentication.getPrincipal();  을 이용하여 id 획득

 

(주의)

in class)로그인하지 않았다면 , Authentication 객체에 담긴게 없게 되고 , authentication 호출하면 null이나옴
in jsp)<sec:authentication property="name" var="Session_userID"/> -> 등록된게 없으면 ,anonymousUser 가 나옴

 

1. url 에 접근권한 설정

security xml 설정

 

(url리소스)
정회원권한

 

/*/contentView/delete  (Authentication 와 게시글 id 비교)
 /*/contentView/update(get&post) (이하동문)
/*/contentView/updateBoard(이하동문)
/*/contentView/replyBoard(get&post) (Authentication 존재여부)
/*/contentView/deleteComment(Authentication 와 댓글 id 비교)
 /*/contentView/registerComment(Authentication 존재여부)
(요약)=> /*/contentView/**
 /*/write(get&post) 

/*/contentView/asyncGood


비회원권한
 /**

 

문제발생점

 /*/write 페이지에서 ->post 방식에서 세션 만료후 , 글등록을 누르면 -> login 창으로 이동후 로그인 -> 등록은 되는데 이상하게 되는 문제 발생

해결점
  세션만료된 POST 방식의 경우 로그인성공핸들러에서 sendRedirect 를 무시하게함 ( HTTP 메소드를 이용하여 구현 ) 
-> 웰컴페이지로 이동 ( default-target-url="/")

 

특이사항

/*/contentView/asyncGood 는 ajax 요청 url 이다 , 

비로그인 상태에서 해당 링크를 클릭 하면 , 로그인 페이지로 이동할 줄 알았으나 이동하지 않음 

개인적인 생각으로는 ,  서버의 produces 와 클라이언트의 dataType이 이미 JSON 으로 정해져 있으므로 ,

로그인 페이지가 나오지 않은 것으로 보인다..

그럼에도 보안성을 위해서 security xml 에 등록을 하였다

 

3 사용자에 의하여 로그인 페이지로 이동후 로그인 시 , 메인페이지로 이동

security xml 내부에

default-target-url="/" 로 설정하여 구현하였음

 

6 로그아웃 구현

1
2
3
4
5
6
7
8
9
<http>
    ...
    <logout
                logout-url="/logout"
                logout-success-url="/login"
                invalidate-session="true"
                delete-cookies="Cookie_userID"
    />
</http>
cs

로그아웃 성공시 , 로그인페이지로 이동하게 하였고 (5줄)

세션,지정된 쿠키가 해제 되도록 해주었다 (6,7줄)

 

4 로그인 유지기능을 remember me 이용하여서 구현

1. 쿠키만을 이용하는 방법 (Simple Hash Cookie)  - 이용

2. DB에 저장된 데이터를 이용해 쿠키를 이중 인증하는 방법 (Persistent 기반)

1
2
3
4
5
6
7
8
9
10
11
<http>
    ...
    <logout
        ..            
        delete-cookies="SPRING_SECURITY_REMEMBER_ME_COOKIE,Cookie_userID"
    />
    <remember-me
        key="keyforHashde_endcoding"
        token-validity-seconds="604800"
    />
</http>
cs

 

8줄의 key 값은 암호화된 쿠키를 암/복호화 하는데 이용되는 key 값이다

쿠키의 유효시간을 일주일로 잡아주었다(9줄)

로그인html 에서 자동로그인 체크박스의 name="_spring_security_remember_me" 로 잡아주었다

 

특이점

In class) authentication.getPrincipal() 은 사용자의 ID 를 반환해 주었다 , 하지만,

REMEMBER ME 가 적용된 상태에서 -> 자동로그인으로 로그인 -> 서버재실행 -> authentication.getPrincipal() 은 UserinfoVO객체 반환이 되었다

나는 아이디가 필요하였기에 , authentication.getName으로 변경하여 해결 하였지만 ...

개인적인 생각으로는 , 서버가 다운되면 자동으로 Security Context Holder 내부의 Authentication도 초기화가 될 것이고 , 그렇다면 쿠키를 가져와 쿠키내용을 토대로 VO객체 생성후, Authentication 객체 생성에 이용되는 것이 아닐까? 하고 생각해본다.. 두서가 없구나 ㅠㅠ 공부부족이다

 

 

참고 : todyDev :: Spring Security - 로그인 성공 후 부가 작업 (tistory.com) 

spring security 파헤치기 (구조, 인증과정, 설정, 핸들러 및 암호화 예제, @Secured, @AuthenticationPrincipal, taglib) (tistory.com)

스프링 Security_로그인_자동 로그인(Remember-me) [8/9] (tistory.com) 

12. spring security remember me 기능 추가 (tistory.com)

https://djunnni.gitbook.io/springboot/2019-11-30

'21년이전 > 웹_' 카테고리의 다른 글

테스트오류 문제 - No tests found for given includes  (0) 2021.09.07
JUNIT 정리  (0) 2021.09.06
SPRING - Logback 사용하기  (0) 2021.07.29
Spring - 컨트롤러가 두번 호출되는 문제  (0) 2021.07.29
MVN Repository  (0) 2021.07.26
728x90

모든 부가 설치파일들은 의존성(dependency) 관련 버전을 반드시 확인해야 한다.

부가 설치파일과 스프링버전이 꼭 일치하는 것이 아니기 때문에 , 의존성에 맞는 버전을 사용하면 된다.

MVN Repository 에서 Compile Dependencies 을 확인해야한다

 

 

'21년이전 > 웹_' 카테고리의 다른 글

테스트오류 문제 - No tests found for given includes  (0) 2021.09.07
JUNIT 정리  (0) 2021.09.06
SPRING - Logback 사용하기  (0) 2021.07.29
Spring - 컨트롤러가 두번 호출되는 문제  (0) 2021.07.29
Spring security 적용  (0) 2021.07.28
728x90

계기

1. client -> server 로 오는 url 을 매핑 시켜줄 때도 프로젝트명을 고려해야 하는 번거로움

2. resource , css , js 등 ViewResolver를 타는 것들 역시 프로젝트명을 신경써줘야함

3. 기본 url 이 '로컬호스트(혹은 IP주소):포트번호' 인데 , 모든 url요청에 일일히 프로젝트명을 넣어줘야하는 번거로움

4. 상대경로 url 요청을 절대경로 url 요청으로 변경하다보니 프로젝트명 제거의 필요성을 느끼게됨

 

원인

WAS 내부의 PATH 경로 값이 자동으로 'http://localhost:8090/PATH값' 을 베이스로 잡음

 

해결

PATH 값을 '/' 로 변경시켜줄 것

 

 

톰켓 서버 접속후 , 하단 Modules 클릭

 

설정변경할 프로젝트 선택후 , Edit 클릭

 

Path 경로를 '/' 로 변경

 

프로젝트명없이 실행됨

 

 

+ Recent posts