728x90
반응형
로그인, 회원가입
Maria DB 를 연동하여 만들었습니다.
Maria DB 유저테이블
추후 수정될 것으로 예상된다.
유저 넘버
ID
PW
Nickname
일단 위 DB로만 구성하였으며 추후 ERD는 수정될수있습니다.
CREATE TABLE `users` (
`USERSNO` INT(11) NOT NULL AUTO_INCREMENT,
`id` VARCHAR(20) NOT NULL COLLATE 'utf8mb3_general_ci',
`pw` VARCHAR(20) NOT NULL COLLATE 'utf8mb3_general_ci',
`nickname` VARCHAR(20) NOT NULL COLLATE 'utf8mb3_general_ci',
`email` VARCHAR(20) NOT NULL COLLATE 'utf8mb3_general_ci',
PRIMARY KEY (`USERSNO`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=4
;
UserController.java
src - main - java - talk.server - UserController.java
package talk.server.controller;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import talk.server.jwt.JwtTokenProvider;
import talk.server.service.UserService;
import talk.server.vo.User;
import talk.server.vo.resLoginUser;
import javax.servlet.http.HttpSession;
import java.util.Map;
@Api(tags = {"회원관련 컨트롤러"})
@RequestMapping("/user")
@RestController
public class UserController {
@Autowired
private UserService userService;
@Autowired
private JwtTokenProvider jwtTokenProvider;
// 일반, 소셜 회원가입 로그인 구분
@PostMapping("/signup")
public String signup(@RequestBody Map<String, String> map) {
// 회원 가입 로직
//닉네임 중복검사
int dcNicnName = userService.getUserByNickName(map.get("nickname"));
if (dcNicnName >= 1) return "nickname";
//username (ID) 중복검사
int dcUserName = userService.getUserByUserName(map.get("username"));
if (dcUserName >= 1) return "username";
boolean result = userService.setUser(map);
if (result) return "success";
else return "failure";
}
@PostMapping("/signin")
public ResponseEntity<resLoginUser> signin(@RequestBody Map<String, String> map) {
// 로그인 로직
// id 확인
int dcUserName = userService.getUserByUserName(map.get("username"));
// id가 없는 경우
if (dcUserName == 0) {
resLoginUser result = new resLoginUser();
result.setResult("noid");
return new ResponseEntity(result, HttpStatus.OK);
}
User user = userService.getUser(map);
if (user == null) {
resLoginUser result = new resLoginUser();
result.setResult("nopassword");
return new ResponseEntity(result, HttpStatus.OK);
}
resLoginUser result = new resLoginUser();
result.setResult("success");
result.setNickname(user.getNickname());
result.setSuccess(true);
result.setToken(user.getAuth());
return ResponseEntity.ok(result);
}
//로그아웃
@PostMapping("/logout")
public ModelAndView logout(HttpSession session) {
userService.logout(session);
ModelAndView mav = new ModelAndView();
mav.setViewName("login");
mav.addObject("msg","logout");
return mav;
}
}
User.java
src - main - java - talk.server - vo - User
package talk.server.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements UserDetails {
private String email;
private String id;
private String password;
private String nickname;
private String auth;
private int enabled;
private List<String> roles = new ArrayList<>();
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
ArrayList<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();
authList.add(new SimpleGrantedAuthority("ROLE_USER"));
return authList;
}
@Override
public String getUsername() {
return this.id;
}
@Override
public boolean isAccountNonExpired() {
return false;
}
@Override
public boolean isAccountNonLocked() {
return false;
}
@Override
public boolean isCredentialsNonExpired() {
return false;
}
@Override
public boolean isEnabled() {
return false;
}
}
UserDao.java
src - main - java - talk.server - dao
package talk.server.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements UserDetails {
private String email;
private String id;
private String password;
private String nickname;
private String auth;
private int enabled;
private List<String> roles = new ArrayList<>();
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
ArrayList<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();
authList.add(new SimpleGrantedAuthority("ROLE_USER"));
return authList;
}
@Override
public String getUsername() {
return this.id;
}
@Override
public boolean isAccountNonExpired() {
return false;
}
@Override
public boolean isAccountNonLocked() {
return false;
}
@Override
public boolean isCredentialsNonExpired() {
return false;
}
@Override
public boolean isEnabled() {
return false;
}
}
user.xml
resources - mapper - user.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="talk.server.dao.UserDao">
<select id="getUserByNickName" parameterType="java.lang.String" resultType="java.lang.Integer">
select count(*) from users where nickname=#{nickname}
</select>
<select id="getUserByUserName" parameterType="java.lang.String" resultType="java.lang.Integer">
select count(*) from users where id=#{username}
</select>
<select id="getUser" parameterType="map" resultType="User">
select * from users where id = #{username} and pw = #{password}
</select>
<insert id="setUser" parameterType="map">
INSERT INTO users VALUES(NULL, #{username}, #{password}, #{nickname}, 'temp');
</insert>
</mapper>
728x90
반응형
'개발 > 술Talk' 카테고리의 다른 글
[Spring & Maria DB] 회원 정보 수정, 회원 정보 리스트 받아오기 (0) | 2021.08.18 |
---|---|
[Spring & Maria DB] Restful API 게시판 CRUD (0) | 2021.08.12 |
window 환경 Docker - Kurento ( 도커 - 쿠렌토 ) 사용하기 (11) | 2021.08.03 |
[ BE - JS ]JWT ( Security ) (0) | 2021.07.26 |
[ 술 Talk ] - 프로젝트 1주차 진행 내용 (0) | 2021.07.16 |