2015-01-16 3 views
0

Я старался интегрировать Spring Spring и шаблон FreeMarker в приложение Spring MVC. Я использовал очень простую регистрационную форму для отправки имени пользователя и пароля в/j_spring_security_check. Я могу войти и получить роли пользователя на уровне Java. Но когда я попытался проверить Роль в FreeMarker, мне не повезло. Я добавил следующее в верхней части файла FTL:
Проверка роли безопасности Spring в шаблоне FreeMarker

<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] /> 

и использовали следующую процедуру для проверки роли:

<@security.authorize ifAnyGranted="ROLE_ADMIN"> 
Your is Administrator 
</@security.authorize> 

Я получаю следующее сообщение об ошибке:

Jan 15, 2015 10:15:22 PM org.apache.catalina.core.ApplicationDispatcher invoke 
SEVERE: Servlet.service() for servlet freemarker threw exception 
FreeMarker template error: 
The following has evaluated to null or missing: 
==> security [in template "WEB-INF/jsp/modules/user/welcome.ftl" at line 2, column 3] 

Tip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)?? 

The failing instruction (FTL stack trace): 
---------- 
==> @security.authorize ifAnyGranted="ROL... [in template "WEB-INF/jsp/modules/user/welcome.ftl" at line 2, column 1] 
---------- 

Java stack trace (for programmers): 
---------- 
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] 
    at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98) 
    at freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:41) 
    at freemarker.core.UnexpectedTypeException.<init>(UnexpectedTypeException.java:24) 
    at freemarker.core.Dot._eval(Dot.java:81) 
    at freemarker.core.Expression.eval(Expression.java:111) 
    at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106) 
    at freemarker.core.Environment.visit(Environment.java:265) 
    at freemarker.core.MixedContent.accept(MixedContent.java:93) 
    at freemarker.core.Environment.visit(Environment.java:265) 
    at freemarker.core.Environment.process(Environment.java:243) 
    at freemarker.template.Template.process(Template.java:277) 
    at freemarker.ext.servlet.FreemarkerServlet.process(FreemarkerServlet.java:452) 
    at freemarker.ext.servlet.FreemarkerServlet.doGet(FreemarkerServlet.java:391) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488) 
    at freemarker.ext.jsp.FreeMarkerPageContext.include(FreeMarkerPageContext.java:406) 
    at org.apache.tiles.request.jsp.JspRequest.doInclude(JspRequest.java:123) 
    at org.apache.tiles.request.AbstractViewRequest.dispatch(AbstractViewRequest.java:47) 
    at org.apache.tiles.request.render.DispatchRenderer.render(DispatchRenderer.java:47) 
    at org.apache.tiles.request.render.ChainedDelegateRenderer.render(ChainedDelegateRenderer.java:68) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:259) 
    at org.apache.tiles.template.InsertAttributeModel.renderAttribute(InsertAttributeModel.java:188) 
    at org.apache.tiles.template.InsertAttributeModel.execute(InsertAttributeModel.java:132) 
    at org.apache.tiles.jsp.taglib.InsertAttributeTag.doTag(InsertAttributeTag.java:299) 
    at freemarker.ext.jsp.SimpleTagDirectiveModel.execute(SimpleTagDirectiveModel.java:75) 
    at freemarker.core.Environment.visit(Environment.java:341) 
    at freemarker.core.UnifiedCall.accept(UnifiedCall.java:136) 
    at freemarker.core.Environment.visit(Environment.java:265) 
    at freemarker.core.MixedContent.accept(MixedContent.java:93) 
    at freemarker.core.Environment.visit(Environment.java:265) 
    at freemarker.core.Environment.process(Environment.java:243) 
    at freemarker.template.Template.process(Template.java:277) 
    at freemarker.ext.servlet.FreemarkerServlet.process(FreemarkerServlet.java:452) 
    at freemarker.ext.servlet.FreemarkerServlet.doGet(FreemarkerServlet.java:391) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
    at org.apache.tiles.request.servlet.ServletRequest.forward(ServletRequest.java:265) 
    at org.apache.tiles.request.servlet.ServletRequest.doForward(ServletRequest.java:228) 
    at org.apache.tiles.request.AbstractClientRequest.dispatch(AbstractClientRequest.java:57) 
    at org.apache.tiles.request.render.DispatchRenderer.render(DispatchRenderer.java:47) 
    at org.apache.tiles.request.render.ChainedDelegateRenderer.render(ChainedDelegateRenderer.java:68) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:259) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:397) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:238) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:221) 
    at org.apache.tiles.renderer.DefinitionRenderer.render(DefinitionRenderer.java:59) 
    at org.springframework.web.servlet.view.tiles3.TilesView.renderMergedOutputModel(TilesView.java:137) 
    at com.smartwcm.web.tiles.ExtTilesView.renderMergedOutputModel(ExtTilesView.java:41) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208) 
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:662) 

Может кто-нибудь предлагает любую идею, почему я не могу проверить файл Role in view (FreeMarker)?

ответ

0

Жалуется на то, что не обнаружил тег @ security.authorize. Я вижу, вы используете плитки. Если welcome.ftl является включенным файлом, вам может потребоваться включить Spring tag tag library поверх всех включенных файлов. У меня была аналогичная проблема, и именно так я ее и работал.

<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] /> 
+0

Да, это сработало. Спасибо за помощь. –

Смежные вопросы