Spring MVC가 세션에 설정된 속성을 가져올 수 없습니다.

inw

Spring MVC와 JQUERY를 사용하여 양식에서 서버로 데이터를 제출하는 2 단계 프로세스를 구현하고 있습니다.

  1. JQUERY ajax POST 요청은 파일 찾아보기를 클릭하면 양식에서 서버로 파일 데이터를 제출합니다. 이것은 파일 서버에 파일을 저장하고 파일 정보를 저장하는 데이터베이스에 항목을 생성하며 모드는 초안으로 설정됩니다.

  2. 사용자가 양식 제출 버튼을 클릭하면 '파일 제목'등과 같은 다른 양식 데이터가 서버에 제출됩니다. 데이터베이스 입력은 이제 모드를 '완료'로 설정해야합니다.

1 단계에서는 데이터베이스 컬럼의 Id, 파일명과 같은 파일 데이터를 세션 속성으로 설정합니다.

/**
 * Upload single file using Spring Controller
 */
@RequestMapping(value = "/uploadFileDraft", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void uploadFileDraft(@RequestParam("file") MultipartFile file,Model map,  HttpSession httpSession) {

    PostDto draftPost = new PostDto();
    draftPost.setPostedDate(new Date());
    draftPost.setStrRawFileName(file.getOriginalFilename());

    //Logic to save this object into database.
    postService.uploadPostDraft(draftPost);

    //now set the data into session object
    httpSession.setAttribute("filePostDraftDto", draftPost);
}

이제 2 단계에서 세션에서이 Dto 개체를 검색하고 다른 서비스를 호출하려고합니다. 그러나 그는 세션에 존재하지 않습니다.

@RequestMapping(value = "/uploadFilePublish", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void uploadVideoPublish(@RequestParam("strVideoTitle") String strVideoTitle, Model map, HttpSession httpSession) {
    PostDto postDtoDraft = null;
        if(null!= httpSession.getAttribute("filePostDraftDto"))
        {
            postDtoDraft = (PostDto)httpSession.getAttribute("filePostDraftDto");
        }


        if(null!=postDtoDraft )
        {
            System.out.println("file name from session is: "+postDtoDraft.getStrFileName());
        }
        else
        {
            System.out.println("error: postDtoDraft is null");
        }
    }

}

다음은 매번 인쇄됩니다. error : postDtoDraft is null

내 web.xml은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>WebConnect</display-name>

<!-- Spring Security Configuration File -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-security.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlet and Filters -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>


<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.htm</welcome-file>
    </welcome-file-list>
<!-- session time out set as 30 minites -->
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

applicationConfig.xml은 다음과 같습니다.

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

<context:annotation-config />
<context:component-scan base-package="com.mycomp.myproj" />
<context:spring-configured />

<neo4j:config graphDatabaseService="graphDatabaseService" />
<neo4j:repositories base-package="com.mycomp.myproj.repository" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- setting maximum upload size -->
    <property name="maxUploadSize" value="10000000000" />

</bean>

<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:default-servlet-handler />
<mvc:annotation-driven />

<tx:annotation-driven mode="aspectj"
    transaction-manager="transactionManager" />

spring-security.xml은 다음과 같습니다.

<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security.xsd">

<http pattern="/resources/**" security="none" />

<http authentication-manager-ref="userAuthManager">
    <intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/register" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page='/' authentication-failure-url="/" />
    <logout invalidate-session="true" logout-success-url="/" logout-url="/j_spring_security_logout" />
    <session-management invalid-session-url="/">
        <concurrency-control max-sessions="1"
            expired-url="/" />
    </session-management>
</http>

<beans:bean id="userAuthManager" class="com.inw.pyt.security.UserAuthManager">
</beans:bean>

<beans:bean id="passwordEncoder"
    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />

inw

이 문제에 대한 해결책은 PostDto 클래스가 직렬화 가능하지 않은 것입니다. Serializable을 구현하기 위해 PostDto를 변경하면 작동하기 시작했습니다. Spring에 제한이있는 것처럼 보이며 직렬화 가능하지 않으면 객체를 세션에 저장할 수 없습니다.

HttpSession 대신 Spring의 자체 @SessionAttributes를 사용하여 세션에서 설정하고 가져 오려고 할 때 문제를 발견했습니다. 그런 다음 속성을 Spring 모델로 설정하는 동안 콘솔에 다음 오류가 발생했습니다.

StandardWrapperValve[mvc-dispatcher]: Servlet.service() for servlet mvc-dispatcher threw exception
java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute with name filePostDraftDto
    at org.apache.catalina.session.ManagerBase.checkSessionAttribute(ManagerBase.java:835)
    at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1840)
    at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:178)
    at org.springframework.web.context.request.ServletRequestAttributes.setAttribute(ServletRequestAttributes.java:131)
    at org.springframework.web.bind.support.DefaultSessionAttributeStore.storeAttribute(DefaultSessionAttributeStore.java:55)
    at org.springframework.web.method.annotation.SessionAttributesHandler.storeAttributes(SessionAttributesHandler.java:124)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

xml에서 특정 속성을 가져올 수 없습니다.

분류에서Dev

선택 옵션에서 MySQL (Spring MVC)로 값을 가져올 수 없습니다.

분류에서Dev

중첩 된 개체에서 속성을 가져올 수 없습니다.

분류에서Dev

IE 및 Safari에서 세션을 가져올 수 없습니다.

분류에서Dev

세션 저장소에서 세션을 가져올 수 없습니다.

분류에서Dev

Websockets를 사용할 때 Spring Controller에서 세션을 가져올 수 없습니다.

분류에서Dev

추가 된 자식 (div)에 null 속성 innerHTML을 설정할 수 없습니다.

분류에서Dev

추가 된 자식 (div)에 null 속성 innerHTML을 설정할 수 없습니다.

분류에서Dev

파이프 내부에 설정된 쉘 변수의 정확한 값을 가져올 수 없습니다.

분류에서Dev

PM2는 ~ / .profile 파일에 설정된 업데이트 된 값을 가져올 수 없습니다.

분류에서Dev

설정을 가져올 수 없습니다. 시스템 경로에 없음

분류에서Dev

QueryExpression을 사용하여 엔터티에서 정수 속성을 가져올 수 없습니다.

분류에서Dev

Magento 컬렉션 반복기-추가 속성을 가져올 수 없습니다.

분류에서Dev

Backing Bean에서 사용자 정의 구성 요소 속성을 가져올 수 없습니다.

분류에서Dev

Spring MVC : jsp에서 json 값을 가져올 수 없습니다. 0을 제공합니다.

분류에서Dev

설치 후에도 pydot을 가져올 수 없습니다.

분류에서Dev

jQuery 클릭 함수의 요소에서 사용자 정의 속성을 가져올 수 없습니다.

분류에서Dev

세션 값을 가져올 수 없습니다.

분류에서Dev

컨텍스트에로드 된 외부 파일 속성을 가져올 수 없습니다.

분류에서Dev

Django의 세션 사전 키에서 값을 가져올 수 없습니다.

분류에서Dev

공유 환경 설정에서 부울 값을 가져올 수 없습니다.

분류에서Dev

생성 된 QRCode에서 정보를 가져올 수 없습니다.

분류에서Dev

select2에서 ajax를 사용할 때 사용자 정의 속성 값을 가져올 수 없습니다.

분류에서Dev

.html 확장자가있는 웹 페이지에 표시 할 PHP 측에서 생성 된 세션 변수 값을 가져올 수 없습니다.

분류에서Dev

Swift 3의 JSON에서 지정된 값을 가져올 수 없습니다.

분류에서Dev

openvpn은 새 14.04 설치에서 구성을 가져올 수 없습니다.

분류에서Dev

Jquery 속성을 가져올 수 없습니다 (정의되지 않음)

분류에서Dev

코드 작성이 ECMAScript 6을 따르는 경우 생성자 메서드에서 정의 된 속성을 가져올 수 없습니다.

분류에서Dev

외부 geojson에서 mapbox로 속성을 가져올 수 없습니다.

Related 관련 기사

  1. 1

    xml에서 특정 속성을 가져올 수 없습니다.

  2. 2

    선택 옵션에서 MySQL (Spring MVC)로 값을 가져올 수 없습니다.

  3. 3

    중첩 된 개체에서 속성을 가져올 수 없습니다.

  4. 4

    IE 및 Safari에서 세션을 가져올 수 없습니다.

  5. 5

    세션 저장소에서 세션을 가져올 수 없습니다.

  6. 6

    Websockets를 사용할 때 Spring Controller에서 세션을 가져올 수 없습니다.

  7. 7

    추가 된 자식 (div)에 null 속성 innerHTML을 설정할 수 없습니다.

  8. 8

    추가 된 자식 (div)에 null 속성 innerHTML을 설정할 수 없습니다.

  9. 9

    파이프 내부에 설정된 쉘 변수의 정확한 값을 가져올 수 없습니다.

  10. 10

    PM2는 ~ / .profile 파일에 설정된 업데이트 된 값을 가져올 수 없습니다.

  11. 11

    설정을 가져올 수 없습니다. 시스템 경로에 없음

  12. 12

    QueryExpression을 사용하여 엔터티에서 정수 속성을 가져올 수 없습니다.

  13. 13

    Magento 컬렉션 반복기-추가 속성을 가져올 수 없습니다.

  14. 14

    Backing Bean에서 사용자 정의 구성 요소 속성을 가져올 수 없습니다.

  15. 15

    Spring MVC : jsp에서 json 값을 가져올 수 없습니다. 0을 제공합니다.

  16. 16

    설치 후에도 pydot을 가져올 수 없습니다.

  17. 17

    jQuery 클릭 함수의 요소에서 사용자 정의 속성을 가져올 수 없습니다.

  18. 18

    세션 값을 가져올 수 없습니다.

  19. 19

    컨텍스트에로드 된 외부 파일 속성을 가져올 수 없습니다.

  20. 20

    Django의 세션 사전 키에서 값을 가져올 수 없습니다.

  21. 21

    공유 환경 설정에서 부울 값을 가져올 수 없습니다.

  22. 22

    생성 된 QRCode에서 정보를 가져올 수 없습니다.

  23. 23

    select2에서 ajax를 사용할 때 사용자 정의 속성 값을 가져올 수 없습니다.

  24. 24

    .html 확장자가있는 웹 페이지에 표시 할 PHP 측에서 생성 된 세션 변수 값을 가져올 수 없습니다.

  25. 25

    Swift 3의 JSON에서 지정된 값을 가져올 수 없습니다.

  26. 26

    openvpn은 새 14.04 설치에서 구성을 가져올 수 없습니다.

  27. 27

    Jquery 속성을 가져올 수 없습니다 (정의되지 않음)

  28. 28

    코드 작성이 ECMAScript 6을 따르는 경우 생성자 메서드에서 정의 된 속성을 가져올 수 없습니다.

  29. 29

    외부 geojson에서 mapbox로 속성을 가져올 수 없습니다.

뜨겁다태그

보관