ㅏㅗㅎ

This commit is contained in:
Suh
2020-04-26 02:44:43 +09:00
parent cb979153ec
commit bf04c511a8
96 changed files with 35958 additions and 126 deletions

View File

@@ -0,0 +1,32 @@
package co.nook.app.common;
import java.sql.*;
public class Dao{
public static Connection getConnection(){
Connection conn = null;
try{
Class.forName("org.mariadb.jdbc.Driver");
String url = "jdbc:mariadb://coon.myds.me:3307/NookSearch";
String userId = "minechost";
String pw = "Ahstmxj5zos1!";
conn = DriverManager.getConnection(url, userId, pw);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn){
try{
conn.close();
}catch(SQLException throwables){
throwables.printStackTrace();
}
}
}

View File

@@ -0,0 +1,71 @@
package co.nook.app.common;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
//https://javannspring.tistory.com/105 참고
/*
SHA 256 암호화
*/
public class SHAEncrypt{
public static String getEncrypt(String source, String salt) {
return getEncrypt(source, salt.getBytes());
}
private static String getEncrypt(String source, byte[] salt) {
String result = "";
//이 밑에 3줄에서 암호화
byte[] a = source.getBytes();
byte[] bytes = new byte[a.length + salt.length];
System.arraycopy(a, 0, bytes, 0, a.length);
System.arraycopy(salt, 0, bytes, a.length, salt.length);
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(bytes);
byte[] byteData = md.digest();
/*
* 음수까지 포함된 1바이트 데이터를 양수로 바꾸고 다시 1바이트를 더해 2바이트(16비트) 16진수 데이터로 바꾼후 두번쨰 글자부터
* 2글자식 짤라 최종 문자열에 더해감 그러면 최종으로 64개 길이의 문자열로 바뀜
* 256을 16진수로 변환하면 100이라 앞의 1을 지우기 위해 substring(1)로 유의미한 숫자인 두번쨰 글자부터 잘라 사용함
* 3글자로 만드는 과정을 안하면 9 이하의 숫자는 2글자식 잘라 사용하기 힘듬
*/
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xFF) + 256, 16).substring(1));
}
result = sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return result;
}
public static String generateSalt() {
//SecurityRandom 클래스도 있지만 일단 알아보지 않아 사용하지 않음
Random random = new Random();
byte[] salt = new byte[32];
random.nextBytes(salt);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < salt.length; i++) {
// byte 값을 Hex 값으로 바꾸기.
sb.append(String.format("%02x",salt[i]));
}
return sb.toString();
}
}

View File

@@ -1,18 +0,0 @@
package co.nook.app.join;
import co.nook.app.member.MemberVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class JoinController{
MemberVO vo;
@Autowired
public JoinController( MemberVO vo){
this.vo = vo;
}
}

View File

@@ -1,32 +0,0 @@
package co.nook.app.login;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
@Controller
public class LoginController{
ModelAndView mav;
public LoginController(@Autowired ModelAndView mav){
this.mav = mav;
}
@RequestMapping("/loginCheck.do")
public ModelAndView loginCheck(@RequestParam String id, @RequestParam String pw, HttpServletRequest request, Model model){
mav.setViewName("todo/todo_form");
request.getSession().setAttribute("id", id);
return mav;
}
}

View File

@@ -1,31 +0,0 @@
package co.nook.app.member;
public class MemberVO{
int member_no;
String id;
String pw;
public int getMember_no(){
return member_no;
}
public void setMember_no(int member_no){
this.member_no = member_no;
}
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getPw(){
return pw;
}
public void setPw(String pw){
this.pw = pw;
}
}

View File

@@ -0,0 +1,59 @@
package co.nook.app.todo.dao;
import co.nook.app.todo.service.TodoService;
import co.nook.app.todo.vo.TodoVo;
import org.springframework.stereotype.Repository;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
@Repository("todoDao")
public class TodoDao implements TodoService{
PreparedStatement psmt;
ResultSet rs;
final String SELECT_ALL = "SELECT * FROM userTodo";
@Override
public ArrayList<TodoVo> selectAll(Connection conn){
ArrayList<TodoVo> list = new ArrayList<TodoVo>();
try{
psmt = conn.prepareStatement(SELECT_ALL);
rs = psmt.executeQuery();
while(rs.next()){
TodoVo vo = new TodoVo();
vo.setuNo(rs.getInt("uNo"));
vo.setUserno(rs.getInt("userno"));
vo.setuContent(rs.getString("uContent"));
vo.setuDay(rs.getString("uDay"));
vo.setuNpc(rs.getString("uNpc"));
vo.setuCheck(rs.getString("uCheck"));
list.add(vo);
}
}catch(SQLException throwables){
throwables.printStackTrace();
}
return list;
}
@Override
public int insert(Connection conn, TodoVo vo){
return 0;
}
@Override
public int update(Connection conn, TodoVo vo){
return 0;
}
@Override
public int delete(Connection conn, TodoVo vo){
return 0;
}
}

View File

@@ -0,0 +1,13 @@
package co.nook.app.todo.service;
import co.nook.app.todo.vo.TodoVo;
import java.sql.Connection;
import java.util.ArrayList;
public interface TodoService{
public ArrayList<TodoVo> selectAll(Connection conn);
public int insert(Connection conn, TodoVo vo);
public int update(Connection conn, TodoVo vo);
public int delete(Connection conn, TodoVo vo);
}

View File

@@ -0,0 +1,39 @@
package co.nook.app.todo.service;
import co.nook.app.todo.dao.TodoDao;
import co.nook.app.todo.vo.TodoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.util.ArrayList;
@Service("todoService")
public class TodoServiceImpl implements TodoService{
TodoDao todoDao;
@Autowired
public TodoServiceImpl(TodoDao todoDao){
this.todoDao = todoDao;
}
@Override
public ArrayList<TodoVo> selectAll(Connection conn){
return todoDao.selectAll(conn);
}
@Override
public int insert(Connection conn, TodoVo vo){
return todoDao.insert(conn, vo);
}
@Override
public int update(Connection conn, TodoVo vo){
return todoDao.update(conn, vo);
}
@Override
public int delete(Connection conn, TodoVo vo){
return todoDao.delete(conn, vo);
}
}

View File

@@ -0,0 +1,58 @@
package co.nook.app.todo.vo;
public class TodoVo{
int uNo;
int userno;
String uContent;
String uDay;
String uNpc;
String uCheck;
public int getuNo(){
return uNo;
}
public void setuNo(int uNo){
this.uNo = uNo;
}
public int getUserno(){
return userno;
}
public void setUserno(int userno){
this.userno = userno;
}
public String getuContent(){
return uContent;
}
public void setuContent(String uContent){
this.uContent = uContent;
}
public String getuDay(){
return uDay;
}
public void setuDay(String uDay){
this.uDay = uDay;
}
public String getuNpc(){
return uNpc;
}
public void setuNpc(String uNpc){
this.uNpc = uNpc;
}
public String getuCheck(){
return uCheck;
}
public void setuCheck(String uCheck){
this.uCheck = uCheck;
}
}

View File

@@ -0,0 +1,43 @@
package co.nook.app.todo.web;
import co.nook.app.common.Dao;
import co.nook.app.todo.dao.TodoDao;
import co.nook.app.todo.service.TodoService;
import co.nook.app.todo.vo.TodoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Controller
public class TodoController{
TodoService todoService;
@Autowired
public TodoController(TodoService todoService){
this.todoService = todoService;
}
@ResponseBody
@RequestMapping(value = "/getTodoData.do")
public HashMap<String, Object> getTodoData(Model model){
HashMap<String, Object> map = new HashMap<String, Object>();
Connection conn = Dao.getConnection();
ArrayList<TodoVo> list = todoService.selectAll(conn);
Dao.close(conn);
map.put("list", list);
return map;
}
}

View File

@@ -0,0 +1,82 @@
package co.nook.app.user.dao;
import co.nook.app.common.Dao;
import co.nook.app.user.service.UserService;
import co.nook.app.user.vo.UserVo;
import org.springframework.stereotype.Repository;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
@Repository("userDao")
public class UserDao implements UserService{
PreparedStatement psmt;
ResultSet rs;
@Override
public ArrayList<UserVo> allSelect(Connection conn){
return null;
}
final String SELECT_BY_ID = "select * from user where id = ?";
@Override
public UserVo select(Connection conn, String id){
UserVo vo = null;
try{
conn = Dao.getConnection();
psmt = conn.prepareStatement(SELECT_BY_ID);
psmt.setString(1, id);
rs = psmt.executeQuery();
if(rs.next()){
vo = new UserVo();
vo.setUserNo(rs.getInt("userno"));
vo.setId(rs.getString("id"));
vo.setPassword(rs.getString("password"));
vo.setSalt(rs.getString("salt"));
}
}catch(SQLException e){
e.printStackTrace();
}
return vo;
}
@Override
public UserVo select(Connection conn, int userNo){
return null;
}
final String INSERT = "INSERT INTO user (userno, id, password, salt) VALUES ( NEXTVAL(seq_user), ?, ?, ?)";
@Override
public int insert(Connection conn, UserVo vo){
int result = 0;
try{
psmt = conn.prepareStatement(INSERT);
psmt.setString(1, vo.getId());
psmt.setString(2, vo.getPassword());
psmt.setString(3, vo.getSalt());
result = psmt.executeUpdate();
}catch(SQLException throwables){
throwables.printStackTrace();
}
return result;
}
@Override
public int update(Connection conn, UserVo vo){
return 0;
}
@Override
public int delete(Connection conn, UserVo vo){
return 0;
}
}

View File

@@ -0,0 +1,14 @@
package co.nook.app.user.service;
import co.nook.app.user.vo.UserVo;
import java.sql.Connection;
import java.util.ArrayList;
public interface UserService{
public ArrayList<UserVo> allSelect(Connection conn);
public UserVo select(Connection conn, String id);
public UserVo select(Connection conn, int userNo);
public int insert(Connection conn, UserVo vo);
public int update(Connection conn, UserVo vo);
public int delete(Connection conn, UserVo vo);
}

View File

@@ -0,0 +1,51 @@
package co.nook.app.user.service;
import co.nook.app.user.dao.UserDao;
import co.nook.app.user.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.util.ArrayList;
@Service("userService")
public class UserServiceImpl implements UserService{
UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao){
this.userDao = userDao;
}
@Override
public ArrayList<UserVo> allSelect(Connection conn){
return userDao.allSelect(conn);
}
@Override
public UserVo select(Connection conn, String id){
return userDao.select(conn, id);
}
@Override
public UserVo select(Connection conn, int userNo){
return userDao.select(conn, userNo);
}
@Override
public int insert(Connection conn, UserVo vo){
return userDao.insert(conn, vo);
}
@Override
public int update(Connection conn, UserVo vo){
return userDao.update(conn, vo);
}
@Override
public int delete(Connection conn, UserVo vo){
return userDao.delete(conn, vo);
}
}

View File

@@ -0,0 +1,41 @@
package co.nook.app.user.vo;
public class UserVo{
int userNo;
String id;
String password;
String salt;
public int getUserNo(){
return userNo;
}
public void setUserNo(int userNo){
this.userNo = userNo;
}
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
public String getSalt(){
return salt;
}
public void setSalt(String salt){
this.salt = salt;
}
}

View File

@@ -0,0 +1,64 @@
package co.nook.app.user.web;
import co.nook.app.HomeController;
import co.nook.app.common.Dao;
import co.nook.app.common.SHAEncrypt;
import co.nook.app.user.service.UserService;
import co.nook.app.user.vo.UserVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.sql.Connection;
import java.util.HashMap;
@Controller
public class UserController{
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
UserService userService;
@Autowired
public UserController(UserService userService){
this.userService = userService;
}
@RequestMapping(value = "/join.do", method = RequestMethod.POST)
public String joinProcess(@RequestParam String id, @RequestParam String pw, Model model){
Connection conn = Dao.getConnection();
UserVo vo = new UserVo();
String salt = SHAEncrypt.generateSalt();
String encPw= SHAEncrypt.getEncrypt(pw, salt);
vo.setId(id);
vo.setPassword(encPw);
vo.setSalt(salt);
int result = userService.insert(conn, vo );
Dao.close(conn);
String view = "login/login_form";
if(result == 0){
view = "join/join";
}
return view;
}
@RequestMapping(value = "/join_page.do")
public String toJoinPage(Model model){
return "join/join";
}
@RequestMapping("/todo_page.do")
public String toTodoPage(Model model){
return "todo/todo_form";
}
}

View File

@@ -0,0 +1,69 @@
package co.nook.app.user.web;
import co.nook.app.common.Dao;
import co.nook.app.common.SHAEncrypt;
import co.nook.app.user.service.UserService;
import co.nook.app.user.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.sql.Connection;
import java.util.HashMap;
@RestController
public class UserRestController{
UserService userService;
@Autowired
public UserRestController(UserService userService){
this.userService = userService;
}
@ResponseBody
@RequestMapping( value = "/userCheck.do", method= RequestMethod.POST)
public HashMap<String, Object> userCheck(@RequestBody HashMap<String, Object> map, Model model ){
HashMap<String, Object> responseMap = new HashMap<String, Object>();
Connection conn = Dao.getConnection();
String id = (String)map.get("id");
UserVo vo = userService.select(conn, id);
Dao.close(conn);
if( vo == null ){
responseMap.put("result", "false");
}else{
responseMap.put("result", "true");
}
return responseMap;
}
@ResponseBody
@RequestMapping(value = "/loginCheck.do", method = RequestMethod.POST)
public HashMap<String, Object> loginCheck(@RequestBody HashMap<String, Object> map, HttpServletRequest request, Model model){
HashMap<String, Object> responseMap = new HashMap<String, Object>();
String id = (String)map.get("id");
String pw = (String)map.get("pw");
Connection conn = Dao.getConnection();
UserVo vo = userService.select(conn, id);
Dao.close(conn);
if(vo == null){
responseMap.put("result", "false");
return responseMap;
}
String encPw = SHAEncrypt.getEncrypt(pw, vo.getSalt());
if( vo.getPassword().equals(encPw)){
responseMap.put("result", "true");
request.getSession().setAttribute("userNo", vo.getUserNo());
return responseMap;
}
responseMap.put("result", "false");
return responseMap;
}
}