공부일지
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;
}