공부일지

231227 (Spring)

CD가참둥그렇다 2023. 12. 27. 17:26

css 항상 새로고침 되도록 하기

<link href="<c:url value='/css/common.css?<%= new java.util.Date() %>>'/>" rel="stylesheet" />

jquery로 datepicker 사용하기

  • jquery ui 사이트에서 datepicker의 소스를 찾는다.
  • link와 style을 탬플릿의 header에 넣어주고 datepicker의 스크립트를 넣어준다.
  • 날짜 데이터를 입력하려는 input 태그에 datepicker 아이디를 달아준다.

클래스의 개수 파악하기

  • .length를 사용하여 해당 클래스의 요소의 개수를 알 수 있다.
$(".date").length

datepicker의 커스텀

  • 기본적인 요소들은 설명서를 참고한다.
  • $.datepicker.setDefaults를 이용하여 객체를 설정한다.
  • changeYear, changeMonth는 상단에 연도, 월 선택 select창을 띄우준다.
  • dateFormat은 선택한 날짜를 어떤 형식으로 표기할 것인지 설정한다.
  • showMonthAfterYear은 select창의 순서를 조정한다.
  • dayNamesMin, MonthNamesShort는 요일과 월을 어떠한 형식으로 보여줄 것인지 설정한다.
if ($(".date").length > 0) {
		$.datepicker.setDefaults({
			dateFormat: "yy-mm-dd",
			changeYear: true,
			changeMonth: true,
			showMonthAfterYear: true,
			dayNamesMin: ["일", "월", "화", "수", "목", "금", "토"],
			monthNamesShort: [ "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" ]
		})
	}

 

 

스프링에서 테스트 클래스 만들기

  • @RunWith : 어떤 테스트 클래스를 사용할 것인지 선택
  • @ContextConfiguration : root-context의 주소를 알려줘야함
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
public class Test {

	@Autowired
	@Qualifier("hanul")
	private SqlSession sql;

	public void query_test() {
		System.out.println((String) sql.selectOne("today"));
	}
}

 

암호화 된 로그인 처리

  • 현재의 암호화는 복호화 불가능한 암호화를 사용한다.
  • spring-security-core 라이브러리를 추가한다.
  • 비밀번호 정보를 BCryptPasswordEncoder 를 이용하여 암호화 하여 데이터베이스에 전달한다.
  • 같은 문자열도 매번 다른 형태로 암호화된다.
private BCryptPasswordEncoder pwEncoder = new BCryptPasswordEncoder();

pwEncoder.encode(sc.nextLine())
  • 암호화된 정보가 원래 정보와 일치하는지 여부는 matches 메소드로 알 수 있다.
  • 원래 비밀번호와 암호화된 비밀번호를 차례로 넣어준다.
@org.junit.Test
	public void login() {
		Scanner sc = new Scanner(System.in);

		
		System.out.print("아이디: ");
		String user_id = sc.nextLine();
		
		System.out.print("비밀번호: ");
		String user_pw = sc.nextLine();
		
		MemberVO vo = sql.selectOne("member.info", user_id);
		if(vo == null) {
			System.out.println("아이디 불일치");
		} else {
			if(pwEncoder.matches(user_pw, vo.getUser_pw())) {
				System.out.println("로그인 성공");
			} else {
				System.out.println("비밀번호 불일치");
			}
		}
		sc.close();
	}

@ResponseBody

  • controller에서 반환타입에 해당하는 string을 html의 resp.getwriter의 내부에 작성하는 형식으로 인식하게 된다.

임시 데이터 생성하기

String tempPw = UUID.randomUUID().toString();
			tempPw = tempPw.substring(tempPw.lastIndexOf("_")+1);

프로퍼티의 정보를 자바 파일로 가져오기

  • 사용하는 클래스에 어노테이션을 설정하고, 프로퍼티 주소를 파라미터에 담는다.
  • String을 선언하고 어노테이션으로 @Value를 적고 el코드로 프로퍼티 내부에서 원하는 데이터의 키값을 지정한다.
@PropertySource("classpath:dbconn/conninfo.properties")
public class CommonUtility {

	@Value("${naver.id}")
	private String naverId;

	@Value("${naver.pw}")
	private String naverPw;

spring에서 이메일 보내기

  • HtmlEmail을 사용하는 방법
public void connectMailServer(HtmlEmail mail) {
		mail.setDebug(true);
		mail.setCharset("utf-8");
		mail.setHostName("smtp.naver.com");// 이메일 보낼 사이트
		mail.setAuthentication(naverId, naverPw);// 사이트 로그인 정보
		mail.setSSLOnConnect(true);

	}

	public boolean sendPw(MemberVO vo, String pw) {
		boolean send = true;
		
		HtmlEmail mail = new HtmlEmail();
		connectMailServer(mail); // 메일 서버 연결하기
		try {
			mail.setFrom(naverId, "스마트 IoT 융합 관리자");//메일 보내는 사람 정보
			mail.addTo(vo.getEmail(), vo.getName());//메일 받을 사람 정보
			mail.setSubject("스마트 IoT 융합 임시 비밀번호 발급");//메일 제목
			StringBuilder sb = new StringBuilder();
			sb.append("<h3>"+vo.getName()+"님의 임시 비밀번호가 발급되었습니다.</h3>");
			sb.append("<div>아이디:"+vo.getUser_id()+"</div>");
			sb.append("<div>임시 비밀번호: <strong>"+pw+"</strong></div>");
			sb.append("<div>임시 비밀번호로 로그인 후 새로운 비밀번호로 변경하세요.</div>");
			mail.setHtmlMsg(sb.toString());//메일 내용 붙이기
			mail.send();//메일 보내기
		} catch (EmailException e) {
			System.out.println(e.getMessage());
			send = false;
		}
		return send;
	}