[Spring] 회원가입, 로그인 비밀번호 암호화 처리
리트리버J
·2020. 11. 7. 09:05
728x90
// 1. pom.xml에 비밀번호 암호화 관련 dependecny를 추가해준다.
<!-- ******* 비밀번호 암호화 ******* -->
<!-- core,web,config 이렇게 3가지의 라이브러리 필요 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- ********************** -->
// 2. web.xml에 spring-security bean객체가 담길 xml파일 경로를 설정해준다.
// root-context.xml의 경로처럼 원하는 경로를 설정해주고, 그 경로에 파일을 만들어준다.
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- root-context.xml을 소스폴더 최상위 패스("src/main/resources" => classpath) -->
<param-value>
classpath:root-context.xml
classpath:spring-security.xml
</param-value>
</context-param>
// 3. web.xml의 context-param의 param-value에 설정한 경로에
XML file이 아닌, Spring Bean Configuration File로 파일을 만들고
확장자를 .xml로 만들어준다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
</beans>
// 6. <beans>안에 bean객체를 등록해준다.
// id값과 Controller의 변수명은 동일해야 한다(?)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<!-- bcryptPasswordEncoder -->
<bean id="bcryptPasswordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
</beans>
// 7. Controller를 등록해준다.
@Autowired
private BCryptPasswordEncoder bcryptPasswordEncoder;
/**
* 4. 회원가입 메소드
* @param u
* @param model
* @return
*/
@RequestMapping("uinsert.do")
public String insertMember(User u, Model model) {
System.out.println("암호화 전 : " + u);
u.setPwd(bcryptPasswordEncoder.encode(u.getPwd()));
System.out.println("암호화 후 " + u);
// 이제 서비스로 이동
int result = uService.insertMember(u);
if(result > 0) {
return "redirect:index.do";
}else {
model.addAttribute("msg","회원가입실패");
return "common/errorPage";
}
}
// 8. Service, Dao를 등록한다.
-----------------------------------------------------------------------------------
암호화된 비밀번호 로그인 처리
1. bcryptPasswordEncoder객체의 mathces메소드의 파라미터로
좌항은 입력받은 비밀번호, 우항은 암호화된 User객체의 비밀번호를 넣어준다.
반환값은 boolean형이기 때문에 true / false를 반환한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /** * @param u * @param model * @return */ @RequestMapping(value="login.do",method=RequestMethod.POST) public String userLogin(User u, Model model) { // view에 전달하는 데이터를 Model에 담는다. User loginUser = uService.loginUser(u); // 입력 비밀번호 , 복호화 비밀번호 if(loginUser != null && bcryptPasswordEncoder.matches(u.getPwd(), loginUser.getPwd())) { // model은 request영역이다. 그것을 상단의 @SessionAttributes가 session영역으로 바꿔준다. // request → session model.addAttribute("loginUser",loginUser); return "redirect:index.do"; }else { model.addAttribute("msg", "로그인 실패!"); return "common/errorPage"; } } | cs |
2. myBatis의 mapper.xml 파일도 변경해주어야 한다.
암호가 맞는지 틀린지는 if문에서 비교하기 때문에, ID만 비교하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- 로그인 --> <select id="loginUser" parameterType="Member" resultMap="MemberResultSet"> <!-- 암호화 전 --> SELECT * FROM MEMBER WHERE ID = #{id} AND PWD = #{pwd} AND M_STATUS = 'Y' <!-- 암호화 후 --> SELECT * FROM MEMBER WHERE ID=#{id} AND M_STATUS='Y' </select> | cs |
728x90
'Spring > Spring Web' 카테고리의 다른 글
[Spring / JSON / SQL] 다중행 SQL을 JSONArray에 담아 jsp에 parse 후 출력하기. (0) | 2020.11.07 |
---|---|
[Spring] Controller에서 Controller로 데이터 전달하기 (0) | 2020.11.07 |
[Spring] @어노테이션 정리 (0) | 2020.11.07 |
[Spring] Spring과 Ajax연결하기 (0) | 2020.11.07 |
[Spring] index.jsp를 WEB-INF/views 안에 넣고 DispatcherServlet을 거치지 않고 띄우기. welcom-file 추가 (0) | 2020.11.07 |