신규 블로그를 만들었습니다!
첫번째, 403에러 발생
나무 위키
https://namu.wiki/w/403%20Forbidden
위키 백과
https://ko.wikipedia.org/wiki/HTTP_403
에러에 대한 자세한 내용은 위 두 링크를 확인 하세요
이 글에서는 스프링에서 해결방법에 대해 다루겠습니다.
스프링 프로젝트를 진행하면서,
시큐리티 문제로 403 에러가 발생한다면
주로 csrf 토큰 문제일것이다.
해결방법에는 2가지가 있다.
토큰을 서버로 보내준다.
csrf를 사용하지 않는다.
1. 로그인할때 csrf 토큰을 서버로 같이 보내주는 방법
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- csrf 토큰 -->
<meta id="_csrf" name="_csrf" content="${_csrf.token}" />
<meta id="_csrf_header" name="_csrf_header" content="${_csrf.headerName}" />
<title>로그인 페이지</title>
</head>
<body>
<h1>loginForm</h1>
<form action="<c:url value="/j_spring_security_check" />" method="post">
<!-- csrf 토큰을 로그인 정보와 같이 보내준다. -->
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
ID : <input type="text" name="username"/><br>
Password : <input type="password" name="password"/><br>
<input type="submit" value="login" />
</form>
</body>
</html>
10, 11번째 줄 코드와 20번째 줄 코드를 확인한다.
csrf 토큰을 로그인할때 같이 넘겨주면 된다.
2. csrf를 사용하지 않는 방법
<security:http auto-config="true" use-expressions="true">
<security:csrf disabled="true"/>
<!--
...
...
생략
...
...
-->
</security:http>
context.xml 파일을 수정하면 된다.
http태그 안에 csrf 태그를 넣어준다.
이때, 속성값 disabled="true"를 넣어준다.
두번째, 500 에러 발생
There is no PasswordEncoder mapped for the id "null"
위와 같은 멘트와 함께 에러가 발생한다..
스프링 시큐리티 5 버전으로 넘어오면서
passwordEncoder라는 것이 생겼다.
기존에는
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="123" authorities="ROLE_ADMIN"/>
<security:user name="user" password="123" authorities="ROLE_USER"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
위와 같이 했지만, 시큐리티 5부터는
id값을 붙여줘야한다.
{id값}password
스프링 사이트에서 확인
만약 id값을 사용하기 싫다면
noop을 입력해주면 된다.
스프링에서는 공공사이트, 즉 실제로 사이트를 운영한다면 noop을 이용하면
보안이 취약해서 추천하지 않는다.
일단 테스트 목적으로 noop을 사용하여, 위와 같이 변경한다면..
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="{noop}123" authorities="ROLE_ADMIN"/>
<security:user name="user" password="{noop}123" authorities="ROLE_USER"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
{noop}password
라고 바꿔주면 된다.
이제 실행해보면 정상적으로 로그인이 되는것을 확인 할 수 있다.
'WEB > SpringMVC' 카테고리의 다른 글
SpringMVC :: 스프링 시큐리티 Bcrypt 인코딩하기 (Spring Security) (0) | 2018.07.05 |
---|---|
SpringMVC :: 리다이렉트(redirect) 사용하기 (6) | 2018.03.21 |
SpringMVC :: @ModelAttribute 사용법, 커맨드 객체 이름 바꾸기 (3) | 2018.03.20 |
SpringMVC :: @RequestMapping의 GET방식과 POST방식, GET 과 POST 차이 (10) | 2018.03.20 |
SpringMVC :: @PathVariable 사용하기 (6) | 2018.03.20 |
최근댓글