로그인, SNS, SpringSecurity : DB연동 전환 처리 초기작업 완료

This commit is contained in:
KNKIM 2021-08-20 14:40:08 +09:00
parent b98ed38065
commit 3cc150fc42
13 changed files with 90 additions and 195 deletions

View File

@ -34,6 +34,5 @@
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v8.5"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>

23
pom.xml
View File

@ -142,6 +142,18 @@
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<!-- fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
@ -155,8 +167,17 @@
</exclusions> -->
</dependency>
<!-- Spring Security -->
<!-- <dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.5.0.RELEASE</version>
</dependency> -->
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-faces</artifactId>
<version>2.4.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>

View File

@ -149,7 +149,6 @@ public class QRCodeUtil {
// (2) 앞의 (1) 문자열을 암호화 처리
String cryptedBarcodeText = EgovFileScrty.encodeBinary(barcodeText.getBytes());
log.debug("generateMemberQRCodeImage : cryptedBarcodeText=" + cryptedBarcodeText);
loginVO.setOnnaraUserid(cryptedBarcodeText); // TODO 임시저장처리 DDDDDDDDDDDDDDDDDDDDDDD
// (3) 앞의 (2) 암호화 문자열로 QRCode 생성하여 BufferedImage형식으로 리턴
return generateQRCodeImageByZxing(cryptedBarcodeText);

View File

@ -45,6 +45,8 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
// 권한/인증과 무관한 오픈된 정적 리소트
web.ignoring()
.antMatchers("/resources/**")
.antMatchers("/css/**")
@ -52,13 +54,6 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/js/**")
.antMatchers("/temp/**")
.antMatchers("/favicon/**")
.antMatchers("/*/*Ajax.do")
.antMatchers("/fileupload/**")
.antMatchers("/board/**")
.antMatchers("/inform/**")
.antMatchers("/alert/**")
.antMatchers("/code/**")
.antMatchers("/**")
;
}
@ -82,6 +77,12 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/rent/*.do").permitAll()
.antMatchers("/collection/*.do").permitAll()
.antMatchers("/sample/password/getSampleEncoder.do").permitAll()
.antMatchers("/*/*Ajax.do").permitAll()
.antMatchers("/fileupload/**").permitAll()
.antMatchers("/board/**").permitAll()
.antMatchers("/inform/**").permitAll()
.antMatchers("/alert/**").permitAll()
.antMatchers("/code/**").permitAll()
.anyRequest().authenticated()
.and().formLogin()
.loginPage("/login/loginForm.do")

View File

@ -36,35 +36,19 @@ public class NlibLoginVO implements Serializable {
private String loginUserId; /* 로그인사용자ID (이메일주소) */
private String deptSeq; /* 조직코드 */
private String deptNm; /* 조직명 */
private String userDiv; /* 사용자구분 */
private String userNm; /* 사용자명 */
private String userPwd; /* 비밀번호 */
private String posNm; /* 직위 */
private String rank; /* 직급 */
private String workFlag; /* 근무여부 */
private String telNo; /* 전화번호 */
private String zipcode; /* 우편번호 (변경예정) */
private String addr1; /* 주소1 (변경예정) */
private String addr2; /* 주소2 (변경예정) */
private String strtMenuSeq; /* 시작페이지 */
private String idCardChkYn; /* 신분증 확인여부 */
private String useYn; /* 사용여부 */
private String ssoFlag; /* 시스템구분(1:기록관리,2:기관배치) */
private String loginErrorCnt; /* 로그인오류건수 */
private String onnaraUserid; /* 온나라사용자아이디(웹서비스용) */
private String pkiNameCheck; /* 인증서 등록시 이름 체크 구분 */
private String ssoKey; /* SSO 인증KEY (SSO를 위한 사용자의 KEY값) */
private String status; /* 상태 : S정상, D탈퇴, P휴면 */
private String regId; /* 등록자 */
private String regDd; /* 등록일자 */
private String modId; /* 수정자 */
private String modDd; /* 수정일자 */
private String email; /* 이메일 */
private String mobileNo; /* 모바일 */
private String websiteAddr; /* 웹사이트 */
private String facebookId; /* 페이스북아이디 */
private String twitterId; /* 트위터아이디 */
private String googleId; /* 구글플러스아이디 */
private String boardRowCnt; /* 글목록수 */
private String birthdate; /* 생년월일 */
private String gender; /* 성별(M:남자,F:여자) */
@ -98,9 +82,11 @@ public class NlibLoginVO implements Serializable {
return this.authKey;
}
//----------------------------------------------------------------
// SETTER.GETTER
//----------------------------------------------------------------
public String getUserId() {
return userId;
}
@ -125,18 +111,22 @@ public class NlibLoginVO implements Serializable {
this.deptSeq = deptSeq;
}
public String getUserDiv() {
return userDiv;
public String getDeptNm() {
return deptNm;
}
public void setUserDiv(String userDiv) {
this.userDiv = userDiv;
public void setDeptNm(String deptNm) {
this.deptNm = deptNm;
}
public String getUserNm() {
return userNm;
}
public String getName() {
return userNm;
}
public void setUserNm(String userNm) {
this.userNm = userNm;
}
@ -149,30 +139,6 @@ public class NlibLoginVO implements Serializable {
this.userPwd = userPwd;
}
public String getPosNm() {
return posNm;
}
public void setPosNm(String posNm) {
this.posNm = posNm;
}
public String getRank() {
return rank;
}
public void setRank(String rank) {
this.rank = rank;
}
public String getWorkFlag() {
return workFlag;
}
public void setWorkFlag(String workFlag) {
this.workFlag = workFlag;
}
public String getTelNo() {
return telNo;
}
@ -205,68 +171,12 @@ public class NlibLoginVO implements Serializable {
this.addr2 = addr2;
}
public String getStrtMenuSeq() {
return strtMenuSeq;
public String getStatus() {
return status;
}
public void setStrtMenuSeq(String strtMenuSeq) {
this.strtMenuSeq = strtMenuSeq;
}
public String getIdCardChkYn() {
return idCardChkYn;
}
public void setIdCardChkYn(String idCardChkYn) {
this.idCardChkYn = idCardChkYn;
}
public String getUseYn() {
return useYn;
}
public void setUseYn(String useYn) {
this.useYn = useYn;
}
public String getSsoFlag() {
return ssoFlag;
}
public void setSsoFlag(String ssoFlag) {
this.ssoFlag = ssoFlag;
}
public String getLoginErrorCnt() {
return loginErrorCnt;
}
public void setLoginErrorCnt(String loginErrorCnt) {
this.loginErrorCnt = loginErrorCnt;
}
public String getOnnaraUserid() {
return onnaraUserid;
}
public void setOnnaraUserid(String onnaraUserid) {
this.onnaraUserid = onnaraUserid;
}
public String getPkiNameCheck() {
return pkiNameCheck;
}
public void setPkiNameCheck(String pkiNameCheck) {
this.pkiNameCheck = pkiNameCheck;
}
public String getSsoKey() {
return ssoKey;
}
public void setSsoKey(String ssoKey) {
this.ssoKey = ssoKey;
public void setStatus(String status) {
this.status = status;
}
public String getRegId() {
@ -317,55 +227,6 @@ public class NlibLoginVO implements Serializable {
this.mobileNo = mobileNo;
}
public String getWebsiteAddr() {
return websiteAddr;
}
public void setWebsiteAddr(String websiteAddr) {
this.websiteAddr = websiteAddr;
}
public String getFacebookId() {
return facebookId;
}
public void setFacebookId(String facebookId) {
this.facebookId = facebookId;
}
public String getTwitterId() {
return twitterId;
}
public void setTwitterId(String twitterId) {
this.twitterId = twitterId;
}
public String getGoogleId() {
return googleId;
}
public void setGoogleId(String googleId) {
this.googleId = googleId;
}
public String getBoardRowCnt() {
return boardRowCnt;
}
public void setBoardRowCnt(String boardRowCnt) {
this.boardRowCnt = boardRowCnt;
}
public String getAuthKey() {
return authKey;
}
public void setAuthKey(String authKey) {
this.authKey = authKey;
}
public String getBirthdate() {
return birthdate;
}
@ -382,20 +243,12 @@ public class NlibLoginVO implements Serializable {
this.gender = gender;
}
public String getDeptNm() {
return deptNm;
public String getAuthKey() {
return authKey;
}
public void setDeptNm(String deptNm) {
this.deptNm = deptNm;
}
public String getAccIp() {
return accIp;
}
public void setAccIp(String accIp) {
this.accIp = accIp;
public void setAuthKey(String authKey) {
this.authKey = authKey;
}
public String getLoginSucsYn() {
@ -406,6 +259,14 @@ public class NlibLoginVO implements Serializable {
this.loginSucsYn = loginSucsYn;
}
public String getAccIp() {
return accIp;
}
public void setAccIp(String accIp) {
this.accIp = accIp;
}
public String getAuthorityList() {
return authorityList;
}

View File

@ -24,7 +24,7 @@ public class LoginDAO extends EgovComAbstractDAO {
}
public void insertLoginLog(NlibLoginVO userVO) {
insert("BBSArticle.insertLoginLog", userVO);
insert("LoginDAO.insertLoginLog", userVO);
}
}

View File

@ -110,12 +110,16 @@ public class LoginServiceImpl implements LoginService
loginDAO.insertLoginLog(userVO);
} catch (DisabledException e) {
e.printStackTrace();
return "/login/loginForm.do?error=locked";
} catch (LockedException e) {
e.printStackTrace();
return "/login/loginForm.do?error=disable";
} catch (BadCredentialsException e) {
e.printStackTrace();
return "/login/loginForm.do?error=invalid-password";
} catch (Exception e) {
e.printStackTrace();
return "/login/loginForm.do?error=other&message=" + e.toString();
}

View File

@ -120,14 +120,17 @@ public class LoginController {
* @return
*/
@RequestMapping("/login/loginForm.do")
public String loginForm(HttpServletRequest req, @RequestParam(required = false) String error,
@RequestParam(required = false) String logout, Model model, HttpSession session) {
if (error != null) {
model.addAttribute("error", String.format("ID와 비밀번호를 확인하여 주시기 바랍니다. %s", error));
}
if (logout != null) {
public String loginForm(HttpServletRequest req,
@RequestParam(required = false) String error,
@RequestParam(required = false) String message,
@RequestParam(required = false) String logout,
Model model,
HttpSession session) {
model.addAttribute("error", error);
model.addAttribute("message", message);
model.addAttribute("logout", String.format("로그아웃하였습니다 %s", logout));
}
// SNS 연동 URL 생성
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO);

View File

@ -14,6 +14,7 @@
<typeAliases>
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap" />
<typeAlias alias="NlibLoginVO" type="nlib.user.service.NlibLoginVO" />
<typeAlias alias="SecUserVO" type="nlib.security.SecUserVO" />
</typeAliases>
</configuration>

View File

@ -4,7 +4,7 @@
<mapper namespace="LoginDAO">
<select id="selectLoginUserInfo" parameterType="String" resultType="NlibLoginVO">
SELECT A.*, B.SNS_DIV, B.SNS_USER_ID, SNS_LOGIN_ID, SSO_REG_DT
SELECT A.*, B.SNS_DIV, B.SNS_USER_ID, SNS_LOGIN_ID, SSO_REG_DT,
CASE WHEN A.USER_DIV = '1' THEN 'ROLE_USER'
WHEN A.USER_DIV = '2' THEN 'ROLE_USER, ROLE_ADMIN'
WHEN A.USER_DIV = '3' THEN 'ROLE_USER, ROLE_ADMIN, ROLE_SYSTEM'
@ -17,7 +17,7 @@
AND B.SNS_DIV = 'N'
AND B.SNS_USER_ID = #{snsUserId}
AND B.SSO_DEL_DT IS NULL /* 연동해제건 제외 */
AND LIMIT 1
LIMIT 1
</select>
<insert id="insertLoginLog" parameterType="NlibLoginVO">
@ -35,7 +35,7 @@
,#{deptSeq}
,#{deptNm}
,#{accIp}
,#{loginSucsYn}
,'Y'
,NOW()
)
</insert>

View File

@ -3,7 +3,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="SecUserDAO">
<select id="loadUserByUsername" parameterType="String" resultType="NlibLoginVO">
<select id="loadUserByUsername" parameterType="String" resultType="SecUserVO">
SELECT A.*,
CASE WHEN A.USER_DIV = '1' THEN 'ROLE_USER'
WHEN A.USER_DIV = '2' THEN 'ROLE_USER, ROLE_ADMIN'
@ -13,7 +13,7 @@
FROM TMP_SM_USER A /* 사용자정보 */
WHERE A.USE_YN = 'Y'
AND A.LOGIN_USER_ID = #{loginUserId}
AND LIMIT 1
LIMIT 1
</select>
</mapper>

View File

@ -49,6 +49,13 @@
</head>
<body>
<br>
error : ${error }
&nbsp;<br>
message : ${message }
&nbsp;<br>
&nbsp;<br>
<!-- 네이버 로그인 화면으로 이동 시키는 URL -->
<!-- 네이버 로그인 화면에서 ID, PW를 올바르게 입력하면 callback 메소드 실행 요청 -->
<div id="naver_id_login" style="text-align:center"><a href="${naverUrl}" ><img width="223" src="${pageContext.request.contextPath}/images/nlib/sns/naver_login_btn.png"/></a></div>

View File

@ -11,7 +11,6 @@
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/inform/selectPrivacyInfo.do';">개인정보처리방침</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/inform/selectTermsInfo.do';">이용약관</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/login/loginForm.do';">로그인</a></li>
<sec:authorize access="not isAuthenticated()">
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/login/loginForm.do';">로그인</a></li>
</sec:authorize>
@ -26,8 +25,8 @@
</sec:authorize>
<li>
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal.name" var="userName" />
<sec:authentication property="principal.id" var="userId" />
<sec:authentication property="principal.userNm" var="userName" />
<sec:authentication property="principal.loginUserId" var="userId" />
${userName}님 (${userId})
</sec:authorize>
<sec:authorize access="not isAuthenticated()">