2014-01-22 28 views
0

我正在使用Spring MVC和安全性,并且我有一个具有2种方法的控制器。一个创建一个网页html,然后就可以做到这一点,并从中制作PDF。传递来自控制器方法的Spring安全认证

@RequestMapping(value = "/getPDFhtml", method = RequestMethod.GET) 
public ModelAndView getPDFhtml(HttpServletRequest request) throws Exception { 
    ModelAndView modelAndView = new ModelAndView("myPDFTemplate"); 
    // do stuff 
    return modelAndView; 
} 

@RequestMapping(value = "/createPDFFile", method = RequestMethod.GET) 
public ModelAndView createPDFFile(HttpServletRequest request) { 
    String url = "/getPDFHtml"; 
    String viewHtml = HttpUtil.getHttpRequest(url); 
    // take viewHtml and turn it into a PDF with iText 
    // other stuff... 
} 

我能得到这个工作的唯一途径是打眼在这样的(安全-APP-context.xml中)春季安全

<intercept-url pattern="/getPDFhtml/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 

因为tenically,我HttpUtil呼叫是新的sesion。 (这只是Apache HttpClitent.jar的包装)

现在我不需要这样做。我需要访问getPDFhtml()中的AuthenticationTolken,它不在那里,因为它的身份验证非常严格,而且我的经理发现了我的小小缺陷,现在它必须消失。 :(

,所以我需要一种方法要么:

  1. 能够调用从createPDFFile(getPDFhtml()),并有ModelAndView的自我呈现成HTML字符串(有人告诉我,4个月前那这不是possable,但谁知道)
  2. 能够调用从createPDFFile getPDFhtml()(),并以某种方式通过jsession ID或认证令牌或任何这样我就可以通过Spring securuity得到正常。

有什么想法?

+0

更好的解决方案通常是注入您正在使用的模板引擎,并直接调用其呈现方法,而不是启动对您的内部服务的往返“外部”调用。 – chrylis

+1

即时通讯都很好,但我怎么在Spring MVC中做到这一点?我假设我正在使用freemarker,但是如何从控制器到达引擎。 – mmaceachran

+0

只需@Autowire它到您的控制器类。 – chrylis

回答

0

我去了FreeMarker。

在我的主servlet.xml中创建我的freemarker的配置:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPath"><value>/WEB-INF/freemarker/</value></property> 
</bean> 

@Autowired到我的控制器和简单:

Template template = freemarkerConfig.getConfiguration().getTemplate("helloWorld.ftl"); 
    template.process(data, out); 
    String viewHtml = out.toString(); 

和关闭的iText它去!感谢所有的帮助。