스프링을 공부하면서 https://cloudstudying.kr/lectures/126 를 참고하여 로그인 기능을 구현했습니다.
1.로그인 후 수정이나 등록을 하면 **요청 매개 변수 '_csrf'또는 헤더 'X-CSRF-TOKEN'에서 유효하지 않은 CSRF 토큰 'null'** 에러가 뜹니다.
그래서 security-context.xml에 <sec:http pattern="/movies/**" security="none" /> 이 부분을 추가했더니 잘 되던데 이부분을 추가안하면 에러가 뜨는 이유는 뭔가요?
2.제가 코드를 구현한 결과는 아래의 사진처럼 로그인을 하고 INDEX.JSP에서
**권한:[ROLE_USER]** 부분과 **로그아웃 버튼**이 보이지않습니다.
![enter image description here][1]
[1]: http://i.imgur.com/4BZvKgF.png
-코드 첨부합니다. 아무리 찾아도 모르겠습니다ㅠ도와주세요
**-security-context.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:sec="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<!-- 스프링 시큐리티 설정의 거의 모든 것 -->
<sec:http pattern="/css/**" security="none" />
<sec:http pattern="/img/**" security="none" />
<sec:http pattern="/js/**" security="none" />
<sec:http pattern="/movies/**" security="none" /><!-- 수정과 등록이 안돼서 추가함 -->
<sec:http pattern="/uploads/**" security="none" />
<sec:http auto-config='true' use-expressions="true">
<sec:intercept-url pattern="/" access="permitAll" />
<sec:intercept-url pattern="/login" access="permitAll" />
<sec:intercept-url pattern="/**" access="isAuthenticated()" />
<sec:form-login login-page="/login"
login-processing-url="/user/login"
default-target-url="/"
username-parameter="email"
password-parameter="password"
authentication-failure-url="/login?error"
always-use-default-target='true' />
<sec:logout invalidate-session="true"
logout-url="/logout"
logout-success-url="/login?logout" />
<!-- enable csrf protection -->
<sec:csrf/>
</sec:http>
<sec:authentication-manager>
<sec:authentication-provider>
<sec:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT email, password, enabled FROM users WHERE email = ?"
authorities-by-username-query="SELECT email, authority FROM authorities WHERE email = ?" />
</sec:authentication-provider>
</sec:authentication-manager>
</beans>
**-tiles.xml**
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="classic" template="/WEB-INF/tiles/layouts/classic.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/components/header.jsp" />
<put-attribute name="footer" value="/WEB-INF/tiles/components/footer.jsp" />
</definition>
<definition name="*/*" extends="classic">
<put-attribute name="content" value="/WEB-INF/views/{1}/{2}.jsp" />
</definition>
</tiles-definitions>
**-header.jsp**
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
<%@ page pageEncoding="utf-8"%>
<nav class="navbar navbar-default">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button>
<img src="https://d1ujqdpfgkvqfi.cloudfront.net/favicon-generator/htdocs/favicons/2019-05-08/79299a0a215820c658abb26740fbfbe6.ico.png" width="50" height="50" align="left">
<a class="navbar-brand" href="/" style="vertical-align:middle;">마이무빙</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="<c:url value="/movies" />">영화</a></li>
</ul>
<!-- 로그인 버튼 -->
<sec:authorize access="isAnonymous()">
<c:url var="loginUrl" value="/login" />
<ul class="nav navbar-nav navbar-right">
<li><a href="${ loginUrl }">로그인</a></li>
</ul>
</sec:authorize>
<!-- 로그아웃 버튼 -->
<sec:authorize access="isAuthenticated()">
<c:url var="logoutUrl" value="/logout" />
<form action="${logoutUrl}" method="post"
class="navbar-form navbar-right">
<button type="submit" class="btn btn-default">로그아웃</button>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form>
</sec:authorize>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
sehongpark님의 답변
## CSRF 답변
csrf는 악의적인 해킹 기법의 하나인데요. 스프링 시큐리티는 이를 막기 위한 토큰을 제공합니다. 따라서 해당 기능을 작동하게 하였다면 모든 form에 대하여 csrf 토큰을 추가해야 합니다.
## 권한 관련 답변
너무 오래전 작업한 코드라 남아있는 게 없네요ㅠ 아래의 링크에서 권한 관련된 정보를 학습해보셔요.
- https://cloudstudying.kr/lectures/149