우당탕탕 좌충우돌 개발일기
스프링부트 SecureRandom 예제 본문
관리자페이지 생성 후 관리자 등록 시, 임의의 비밀번호를 생성해서 발급해주려 한다.
임의의 난수를 만드는 함수로는 Random, SecureRandom이 있는데 그중에서도 SecureRandom이 암호적으로 더 강력한 난수를 만들어주는 클래스라고 하기에 사용해 보았다.
✨ SecureRandom 관련 내용은 하단 링크 참조
https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html
1. 우선 util(공통으로 쓰일 클래스들이 들어갈 곳) 패키지에 SecureRandom함수를 사용해서 RandomUtil 클래스를 생성
2. 생성한 RandomUtil 클래스를 Controller에서 RequestMapping 해준다.
3. 화면단(html)에서 script부분에 fetch로 해당 메서드를 호출한다. 아래는 예제 코드이다.
RandomUtil.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.security.SecureRandom;
@Component
public class RandomUtil {
private static String DATA = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
private static SecureRandom random = new SecureRandom();
/** 랜덤 문자열을 생성한다 **/
@Autowired
public static String generate(int length) {
if (length < 1) {
throw new IllegalArgumentException("길이는 1자리 이상이어야 합니다.");
}
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
sb.append( DATA.charAt(random.nextInt(DATA.length())));
}
return sb.toString();
}
}
SystemController.java
@Controller
@RequestMapping("/system")
public class SystemController {
@Autowired
private RandomUtil randomUtil;
@RequestMapping("/getRandomString")
@ResponseBody
public Map<String, Object> getRandomString() {
String randomKey = randomUtil.generate(10);
Map<String, Object> map = new HashMap<String, Object>();
map.put("randomKey", randomKey);
return map;
}
}
register.html
<div>
<label for="password">비밀번호<sup class="text-danger">*</sup></label>
<button type="button" onclick="generatePassword()">임시 비밀번호 생성</button>
<input type="text" id="password" name="password" placeholder="임시 비밀번호 생성 버튼을 클릭해주세요" required readonly>
</div>
<script>
function generatePassword() {
ComUtils.callFetch('/system/getRandomString')
.then(data => {
var randomString = data.randomKey;
document.getElementById('password').value = randomString;
})
.catch(error => {console.error('Error:', error)});
}
</script>
반응형
'Programming > 삽질기록' 카테고리의 다른 글
[object Object] 출력하기 (0) | 2024.10.23 |
---|---|
Apexchart 데이터 0일때 차트에 나타내기/감추기(chart show/hide) (2) | 2024.10.17 |
[Git] Another git process seems to be running in this repository : 에러해결 (0) | 2023.08.11 |
PSQLException: The column index is out of range: 5, number of columns: 4 에러 해결 (0) | 2023.07.28 |
인텔리제이에서 Git Branch 생성(브랜치 생성) (0) | 2023.07.28 |