이전 다음 버튼

첫페이지와 끝페이지에서 비활성화 하고싶다

 

 

비활성화는 disabled로 가능하다

 

 

첫페이지에서 이전버튼 비활성화

home.jsp

파라미터의 page 값이 0일 경우 이전버튼을 disabled 해준다

 

 

끝페이지에서 다음버튼 비활성화

BoardRepository

먼저 count()를 이용하여 게시글 숫자를 검색한다

 

 

BoardHomeAction

count()의 리턴값을 가공하여 마지막페이지를 저장하고 request에 넣어준다

 

 

home.jsp

requestScope.lastPage와 param.page를 비교하여 같은 값이면 다음버튼을 비활성화 해준다

 

 

결과

 

 

BoardRepository

호출하면 readCount가 1이 올라가는 sql

 

 

BoardDetailAction

액션파일에서 readCountUp()을 호출해주기

 

 

detail.jsp

dto.board.readCount를 받아온다

 

 

부트스트랩에서 페이징 인터페이스 가져오기

 

 

home.jsp에 넣기

 

 

중앙정렬하기

 

 

결과

 

 

BoardHomeAction

모두 가져 오는 것이 아니라 3개만 가져오기

 

 

변경된 모습

 

 

BoardRepository

 

 

결과

 

 

 

'Web > Jsp' 카테고리의 다른 글

첫페이지 끝페이지 이동버튼 비활성화  (0) 2020.06.10
상세보기시 조회수 증가  (0) 2020.06.09
JSP 서블릿 비밀번호 암호화  (0) 2020.06.09
유튜브 업로드 오류 잡기  (0) 2020.06.09
Jsoup HTML파싱 // 미리보기  (0) 2020.06.09

 

풀스캔

 

 

인덱스 이름 확인

 

 

힌트

/*+*/

 

 

 

인덱스를 이용한 정렬

 

 

오프셋을 이용한 일부분 가져오기

여기서 숫자 1의 자리만 바꿔주면서 퍼올리면 된다

 

 

 

 

 

 

 

 

비밀번호 수정시 해쉬 // 페이징처리 // next, prev  // 상세보기시 조회수 증가

---------------------

비밀번호 암호화

-----------------------

 

 

 

 

 

데이터 날리기

 

 

결과

 

// 해쉬암호 : 최근에는 대부분 SHA256을 사용한다.
// 해쉬는 복호화가 되지않는다.
// 암호화와 복호화가 되는 기술은 base64

// 해쉬와 해쉬를 비교하여 검증
// 해쉬는 고정길이라서 같은 값이 나올 수 있다 (충돌)
// 뚫릴 수 있다

// 레인보우 테이블

// 소금치기

 

UsersJoinProcAction

 

 

SHA256

 

테스트코드

더보기
package com.cos.blog.test;

import java.security.MessageDigest;

import org.junit.Test;

//해쉬암호 : 최근에는 대부분 SHA256을 사용한다.
//해쉬는 복호화가 되지않는다.
//암호화와 복호화가 되는 기술은 base64

//해쉬와 해쉬를 비교하여 검증
//해쉬는 고정길이라서 같은 값이 나올 수 있다 (충돌)
//뚫릴 수 있다

//레인보우 테이블

//소금치기


public class SHA256Test {
	
	private final static String salt = "코스";
	
	@Test
	public void encSha256() {
		
		String plain = "1234";
		String result = "";
		
		byte[] bytePlain = plain.getBytes(); // 들어온 문자들을 바이트 단위로 쪼갠다.
		
		for (byte b : bytePlain) {
			System.out.println(b);
		}
		
		byte[] bytesalt = salt.getBytes();
		
		for (byte b : bytesalt) {
			
			System.out.println(b);
		}
		
		
		byte[] bytePlainAndSalt = new byte[bytePlain.length + bytesalt.length];
		
		for (int i = 0; i < bytePlainAndSalt.length; i++) { // 비밀번호와 솔트 넣기
			
			if(i < bytePlain.length) { // 바이트 플레인 길이만큼 채워넣고
				
				bytePlainAndSalt[i] = bytePlain[i];
				
			} else { // 플레인 길이를 오버하면 그 뒤에 솔트를 채워넣는다.
				
				// i - bytePlain.length은 예를들어 i가 6이면 6-6이 되어서 0번째 배열 내용을 소환한다.
				bytePlainAndSalt[i] = bytesalt[i - bytePlain.length];
				
			}
			
		}
		
		
		System.arraycopy(bytePlain, 0, bytePlainAndSalt, 0, bytePlain.length);
		// 매개변수 ; 첫번째 넣을배열, 두번째 넣을배열 시작위치, 세번째 받을배열, 네번째 받을배열 시작위치, 다섯번째 넣을길이
		
		System.arraycopy(bytesalt, 0, bytePlainAndSalt, bytePlain.length, bytesalt.length);
		
		
		for (byte b : bytePlainAndSalt) {
			
			System.out.print(b + " ");
			
		}
		
		try {
			
			MessageDigest md = MessageDigest.getInstance("SHA-256"); // SHA-256암호화 객체 생성
			md.update(bytePlainAndSalt); // md 객체 안에 세팅
			
			byte[] bytedata = md.digest(); // md 객체에서 데이터 받아오기
			
			// StringBuffer 동기화 기능이 있어서 여러 객체가 접근하지 못한다. 임계구역
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < bytedata.length; i++) {
				sb.append(Integer.toHexString((bytedata[i] & 0xFF) + 256).substring(1));
			}
			
			System.out.println(sb.toString());
			
			
			
		} catch (Exception e) {
			
		}
		
		
	}
}

 

 

결과

 

 

 

 

 

 

 

 

 

 

+ Recent posts