2011-03-30 3 views
0

나는 spring mvc, spring security 및 hibernate를 사용하여 웹 응용 프로그램을 개발 중입니다.자동으로 세션에 객체 설정

사용자 자격 증명으로 세션에서 개체를 자동으로 설정할 수있는 방법이 있습니까 ?? 내 말은, 내가 수동으로 세션에 사용자 개체를 설정하는 현재 코드가 있습니다

@RequestMapping(value = { "/privados/procesarLogin", 
     "/sesiones/procesarLogin" }, method = RequestMethod.GET) 
public ModelAndView procesarLogin(HttpServletRequest req) { 
    ModelAndView mav = new ModelAndView(); 
    String usuario = (String) SecurityContextHolder.getContext() 
      .getAuthentication().getCredentials(); 
    Usuario usuarioSesion = us.retornarUsuario(usuario); 
    HttpSession sesion = req.getSession(true); 
    sesion.setAttribute("usuarioSesion", usuarioSesion); 
    mav.setViewName("/privados/principal"); 
    return mav; 
} 

을하지만 사용자 개체를 생성하고 자신의 로그인이 성공적으로 인증 된 후에 자동으로 세션을 설정했다. 내 XML 파일을 어떻게 구성해야합니까 ?? 나의 현재는 다음과 같습니다

// 헤더

<global-method-security secured-annotations="enabled" /> 

<http auto-config="true" access-denied-page="/app/sesiones/procesarLogin"> 

    <logout logout-success-url="/app/sesiones/login" /> 
    <form-login authentication-failure-url="/app/sesiones/login?error=true" 
     login-page="/app/sesiones/login" default-target-url="/app/sesiones/procesarLogin" /> 
    <intercept-url pattern="/app/privados/*" access="ROLE_USER" /> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query="Select usuario, contrasena,true from Usuarios where usuario=?" 
      authorities-by-username-query="Select usuario, role from Usuarios where usuario=?" /> 
     <password-encoder ref="passwordEncoder" /> 
    </authentication-provider> 
</authentication-manager> 

<beans:bean id="jasyptPasswordEncryptor" 
    class="org.jasypt.util.password.BasicPasswordEncryptor" /> 

<beans:bean id="passwordEncoder" class="org.jasypt.spring.security3.PasswordEncoder"> 
    <beans:property name="passwordEncryptor"> 
     <beans:ref bean="jasyptPasswordEncryptor" /> 
    </beans:property> 
</beans:bean> 

내가 사전에 도움을 감사를 바랍니다!

+0

귀하의 질문에 대답 할 수 없지만 다른 봄 API를 통해 찾고 있었고 DefaultSessionAttributeStore를 발견했습니다. 그것은 당신이 다음과 같이 컨트롤러의 세션에서 특정 속성을 설정하고 제거 할 수있게 해줍니다 : public ModelAndView procesarLogin (DefaultSessionAttributeStore status, WebRequest request) {... status.storeAttribute (request, attributeName, attributeValue); status.cleanupAttribute (request, attributeName);} – blong824

답변

0

scope = session을 사용하여 빈을 생성 할 수 있습니다.이 빈은 세션이 생성 될 때 인스턴스를 생성합니다. 3.4 Bean Scopes을 참조하십시오.

희망이 도움이됩니다. 당신이 컨트롤러 (또는 다른 컨트롤러에서) 다른 방법으로 재사용하기를 원하기 때문에 당신이 세션에서 Usuario 개체를 두는 경우

0

, 다음 더 깨끗한 방법은 다음과 같은 방법 자체를 주입하는 것입니다 :

@RequestMapping(value = { "/privados/procesarLogin", 
    "/sesiones/procesarLogin" }, method = RequestMethod.GET) 
public ModelAndView procesarLogin(HttpServletRequest req, Usuario usuario) { 
/* Use usuario */ 
... 
} 

이렇게하려면 WebArgumentResolver을 구현하고 AnnotationMethodHandlerAdapter으로 등록해야합니다. 기존 코드를 WebArgumentResolver 구현의 resolveArgument 메소드로 전송하십시오. 즉 처음 세션에서 사용하는 확인하십시오 그렇지 않으면 SecurityContextHolder에서 빌드하십시오.

0

스프링은 또한 모든 요청에 ​​대해 자동으로 실행될 수있는 HandlerInterceptors을 제공하며 한 번만 프로그래밍 할 수 있습니다. 서블릿 필터와 비슷하지만, 인터셉터는 요청 처리 전후에 상호 작용할 수 있습니다.

관련 문제