login (test) db 설계
create table login(
midx int(8) not null auto_increment,
mid varchar(30) not null,
mpass varchar(80) not null, //MD5 16진수로 받을거임
primary key(midx),
unique key(mid)
);
// test위해 data 미리 하나 만들어둠 (비번 1234)
insert into login values ('0','apink','81dc9bdb52d04dc2036dbd8313ed055');
🔽
spring 미리..
WEB-INF 폴더에 classes 폴더 생성 -> db.properties 파일 생성
==> 이름 고정임 내맘대로 X !
db.properties 에는 ;(세미콜론) X , 주석 작성시 #~
#properties 는 window에서 사용하는 환경설정에 .ini 파일과 동일한 형태의 파일
🔽 db.properties 파일 => db접속 정보 입력
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/cms
user = hana
password = hana1234
select_db = select * from login order by midx desc
//이거의 장점 : ddl 이 여기에 모임
//createStatement 사용 불가
dbcon.java -> class java파일
//database 연결 + properties 활용
public class dbcon {
//classes에 있는 properties 파일을 사용하는 라이브러리
Properties pp = new Properties();
String resource = "db.properties"; //로드할 properties 파일명
public Connection db() throws Exception{
//classes 안에 있는 properties를 로드하여 모든 문자 내용을 저장시킴
this.pp.load(this.getClass().getClassLoader().getResourceAsStream(resource));
Class.forName(this.pp.getProperty("driver"));
Connection con = DriverManager.getConnection(this.pp.getProperty("url"),this.pp.getProperty("user"),this.pp.getProperty("password"));
return con;
}
}
🔽
⚡ 암호화를 처리하여 로그인 하는 웹페이지
login.jsp
<body> <form id="frm" onsubmit="return logins()"> 아이디 : <input type="text" name="mid"><br> 비밀번호 : <input type="text" name="mpass"><br> <button type="submit">로그인</button> </form> </body> <script> function logins(){ frm.method="post"; frm.action="./security2_login.do"; return true; } </script>
sercurity2_login.java (servlet 파일)@WebServlet("/security2_login.do") public class security2_login extends HttpServlet { private static final long serialVersionUID = 1L; //properties는 해당 로드값을 메모리에 저장시킨 후 프로세서가 종료되면 자동으로 소멸되로록 설정되어있음 Properties pp = new Properties(); String ddl = "db.properties"; PreparedStatement ps = null; ResultSet rs = null; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dbcon dc = new dbcon(); try { String mid = request.getParameter("mid"); String mpass = request.getParameter("mpass"); Connection con = dc.db(); this.pp.load(this.getClass().getClassLoader().getResourceAsStream(ddl)); this.ps = con.prepareStatement(this.pp.getProperty("select_db")); this.ps.setString(1, mid); this.rs = this.ps.executeQuery(); this.rs.next(); String db_mid = this.rs.getString("mid"); String db_mpass = this.rs.getString("mpass"); //사용자가 입력한 패스워드를 해당 메소드로 전송해 암호화 텍스트로 변경한 값이 String userpw = new passwd_md5(mpass).md5_passwd(); if(userpw.equals(db_mpass)) { //db에 암호화되어 저장되있는 값과 같다면 System.out.println("로그인 하셨습니다."); }else { System.out.println("올바른 패스워드가 아닙니다."); } this.rs.close(); this.ps.close(); con.close(); }catch(Exception e) { System.out.println("db 연결 실패!"); } } }
- passwd_md5.java => 문자를 md5로 변환하는 class java파일package shop; import java.security.MessageDigest; public class passwd_md5 { private StringBuilder repass = new StringBuilder(); private String ori_pass = null; private MessageDigest md5 = null; public passwd_md5(String userpw) { this.ori_pass = userpw; } //사용자가 입력한 패스워드를 md5로 변환 후 return하는 메소드 public String md5_pass() { try { this.md5 = MessageDigest.getInstance("md5"); this.md5.update(this.ori_pass.getBytes()); byte[] md = this.md5.digest(); for(byte ck : md) { String m = String.format("%x", ck); this.repass.append(m); } }catch(Exception e) { System.out.println("암호화 변환 오류!"); } //return할 메소드 자료형이 String이므로 toString을 이용함 return this.repass.toString(); } }
'CLASS > SERVLET' 카테고리의 다른 글
#9-1 / 보안 (1) | 2024.07.05 |
---|---|
web.xml 선언을 하지 않고 사용 (0) | 2024.07.05 |
로그인 - 자동저장 (0) | 2024.07.03 |
#8-2 / 게시판 insert 모듈화... (0) | 2024.06.21 |
#8-1 / 게시판 (0) | 2024.06.21 |