spring security 에서 fileupload 업로드 파일 이 차단 되 었 습 니 다.
15843 단어 JavaWeb
자, js 파일 을 처음 도 입 했 을 때 부터 구덩이 에 들 어 갔 습 니 다.
<script src="js/jquery.1.9.1.min.js">script>
<script src="js/jquery.fileupload.js">script>
<script src="js/vendor/jquery.ui.widget.js">script>
<script src="js/jquery.iframe-transport.js">script>
<script src="bootstrap/js/bootstrap.min.js">script>
<link href="bootstrap/css/bootstrap.css" type="text/css" rel="stylesheet" />
제 가 도입 할 때 는 이 순서대로!!나중에 방법 을 찾 지 못 했 습 니 다.
$('#file').fileupload();
다음 순서 로
<script src="js/jquery.1.9.1.min.js">script>
<script src="js/vendor/jquery.ui.widget.js">script>
<script src="js/jquery.iframe-transport.js">script>
<script src="js/jquery.fileupload.js">script>
<script src="bootstrap/js/bootstrap.min.js">script>
<link href="bootstrap/css/bootstrap.css" type="text/css" rel="stylesheet" />
jquery. fileupload. js 를 맨 뒤에 두 어야 다른 js 파일 을 참조 할 수 있 습 니 다.
그러면 Security 에서 post 데 이 터 를 얻 으 려 면 csrf 의 token 이 있어 야 합 니 다. 그렇지 않 으 면 403 접근 을 거부 하 는 벽 이 부 딪 힐 수 있 습 니 다. 세 가지 방법 이 있 습 니 다. 1. multipartfilter 를 spring Security FilterChain 위 에 직접 놓 으 면 파일 을 업로드 할 때 multipartfilter 에 의 해 차단 되 고 security 의 보 호 를 받 지 않 습 니 다. 이 방법 을 다시 쓰 십시오.
public class SecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
insertFilters(servletContext, new MultipartFilter());
}
}
xml 설정 에서 MultipartFilter 가 spring Security FilterChain 앞 에 놓 여 있 는 지 확인 합 니 다.
<filter>
<filter-name>MultipartFilterfilter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilterfilter-class>
filter>
<filter>
<filter-name>springSecurityFilterChainfilter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>
filter>
<filter-mapping>
<filter-name>MultipartFilterfilter-name>
/*
filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChainfilter-name>
/*
filter-mapping>
이렇게 해서 간단 하고 거 칠 게 해결 되 었 습 니 다. (그 당시 에는 누구나 파일 을 서버 에 업로드 할 수 있 었 고 잠시 저장 되 었 습 니 다. 권한 을 수 여 받 은 사용자 만 이 처 리 된 파일 을 업로드 할 수 있 었 습 니 다. 대부분의 경우 잠시 저 장 된 파일 들 은 큰 문제 가 없 었 습 니 다. 프레임 워 크 가 정기 적 으로 자동 으로 정리 되 기 때 문 입 니 다.)
2. csrf 의 token 을 url 매개 변수 로 합 니 다.
<html>
<head>
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
head>
<form action="./upload?${_csrf.parameterName}=${_csrf.token}" method="post" enctype="multipart/form-data">
하지만 이 로 인해 토 큰 이 유출 되 었 다.숨겨 진 영역 에 넣 으 면:
type="hidden"
name="${_csrf.parameterName}"
value="${_csrf.token}"/>
comons - fileupload 구성 요소 가 request 를 패키지 할 때 csrf 지원 에 문제 가 있 는 지 csrf 값 을 전달 하지 않 았 습 니 다.그래서 오 버 에 떨 어 졌 는데...................................................
var uploader = new AjaxUpload({
url: '/file/upload',
name: 'uploadfile',
multipart: true,
customHeaders: { '${_csrf.headerName}': '${_csrf.token}' },
...
onComplete: function(filename, response) {
...
},
onError: function( filename, type, status, response ) {
...
}
});
하지만 인터넷 에서 이 플러그 인 을 찾 지 못 했 습 니 다.
4. fileupload 플러그 인:
$('#file').fileupload({
dataType: 'json',
add: function (e, data) {
data.context = $('
但是在jquery.fileupload.js里找了好久,发现了一个方法:_initXHRData: function (options) 跟设置request headers有点关系。可是怎么讲csrf的header和token传进去呢?!后来想到我可以直接用ajaxSend先设置requestHeader不就行了!!!
解决Spring Security 表单上传文件CSRF失效的问题
$(document).ready(function() {
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
$('#file').fileupload({
dataType: 'json',
add: function (e, data) {
data.context = $('
就酱紫,折腾了半天文档,还是用这种方法解决了!!!
PS:如果用的是thymeleaf模板,注意用的是:th:content
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta name="_csrf" th:content="${_csrf.token}"/>
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
head>
참조: stackoverflow 에서 유사 한 해결 방법 stackoverflow 다른 사이트
JSP 의 Taglib 솔 루 션 을 따로 지불 합 니 다.
"sec" uri="http://www.springframework.org/security/tags" %>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaWeb 파일 다운로드 기능 인스턴스 코드업무 중에 만난 파일을 다운로드하는 기능은 스스로 추출합니다. 코드가 간단합니다. 여러분에게 도움이 되었으면 합니다. 자, 말이 많지 않습니다. 코드를 올리십시오! 이상은 본고의 JavaWeb 파일을 다운로드한 코드...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.