从控制器方法传递Spring安全认证

时间:2014-01-22 20:30:55

标签: java spring http spring-mvc spring-security

我正在使用Spring MVC和Security,我有一个带有2种方法的控制器。一个人创建一个网页html,然后就可以用它制作一个PDF文件。

@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...
}

我能让这个工作的唯一方法就是在这样的弹簧安全中打个洞(security-app-context.xml)

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

因为我的HttpUtil调用是一个新的sesion。 (它只是Apache HttpClitent.jar的包装器)

现在我不需要这样做。我需要访问getPDFhtml()中的AuthenticationTolken并且它不在那里,因为它经过身份验证并且我的经理发现了我的小气候黑客并且它现在必须消失。 :(

所以我需要一种方法:

  1. 能够从createPDFFile()调用getPDFhtml()并让ModelAndView将自身渲染为html字符串。 (6个月前我被告知这是不可能的,但谁知道呢)
  2. 能够从createPDFFile()调用getPDFhtml()并以某种方式传递jsession id或身份验证令牌或其他任何方式以便我可以正确地通过Spring securuity。
  3. 任何想法?

1 个答案:

答案 0 :(得分:0)

我选择了FreeMarker。

在我的main-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 it into my controller:

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

然后去iText吧!感谢您的帮助。