2012-01-12 14 views
39

私が見つけた最も近い答えはhereですが、正に私は実際に何が起こっているのか分かりませんそこに。Struts2 + Spring Security 2.06:Actionメソッドで@Securedを使用しようとするとValuestackがnullになる

私はStruts2 + Spring Security 2.06をカスタム認証プロバイダとアクセス決定マネージャとともに使用して、 "ROLE_"接頭辞の必要性を取り除いています。

<beans:bean id="customAuthenticationProvider" 
       class="com.test.testconsole.security.CustomAuthenticationProvider"> 
     <beans:property name="userManagementService" ref="userManagementService"/> 
     <custom-authentication-provider/> 
    </beans:bean> 

    <!--Customize Spring Security's access decision manager to remove need for "ROLE_" prefix--> 
    <beans:bean 
      id="accessDecisionManager" 
      class="org.springframework.security.vote.AffirmativeBased"> 
     <beans:property name="decisionVoters"> 
      <beans:list> 
       <beans:ref bean="roleVoter"/> 
       <beans:ref bean="authenticatedVoter"/> 
      </beans:list> 
     </beans:property> 
    </beans:bean> 

    <beans:bean 
      id="roleVoter" 
      class="org.springframework.security.vote.RoleVoter"> 
     <beans:property name="rolePrefix" value=""/> 
    </beans:bean> 

    <beans:bean 
      id="authenticatedVoter" 
      class="org.springframework.security.vote.AuthenticatedVoter"> 
    </beans:bean> 

<global-method-security secured-annotations="enabled" access-decision-manager-ref="accessDecisionManager"/> 

私のweb.xmlの関連部分:

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

<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class> 
     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
    </filter-class> 
</filter> 

<!--Has to be placed _Before_ the struts2 filter-mapping--> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

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

そして、私は単に私のアクションクラスのいずれかに@Securedを使用してい

私のApplicationContext-のsecurity.xmlは、次のようになりますそうですね。

@Securedアノテーションをアクション内のメソッドに追加すると、すべてのパラメータがnullになりますvaluestackがnullであるように、実際にはなります

154379 [[email protected]] DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler - Entering nullPropertyValue [target=[[email protected], [email protected]], property=currentPage]   
154379 [[email protected]] WARN com.opensymphony.xwork2.ognl.OgnlValueStack - Caught an exception while evaluating expression 'currentPage.equals('Summary')' against value stack 
    java.lang.NullPointerException: target is null for method equals 
     at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1347) 
     at ognl.ASTMethod.getValueBody(ASTMethod.java:90) 
     at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) 
     at ognl.SimpleNode.getValue(SimpleNode.java:258) 
     at ognl.ASTChain.getValueBody(ASTChain.java:141) 
     at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) 
     at ognl.SimpleNode.getValue(SimpleNode.java:258) 
     at ognl.Ognl.getValue(Ognl.java:494) 
     at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:217) 
     at com.opensymphony.xwork2.ognl.OgnlValueStack.getValue(OgnlValueStack.java:342) 
     at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValue(OgnlValueStack.java:331) 
     at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValueWhenExpressionIsNotNull(OgnlValueStack.java:307) 
     at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:293) 
     at org.apache.struts2.components.Component.findValue(Component.java:382) 
     at org.apache.struts2.components.If.start(If.java:86) 
     at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:53) 
     at org.apache.jsp.WEB_002dINF.views.layouts.header_jsp._jspx_meth_s_if_0(org.apache.jsp.WEB_002dINF.views.layouts.header_jsp:252) 
     at org.apache.jsp.WEB_002dINF.views.layouts.header_jsp._jspService(org.apache.jsp.WEB_002dINF.views.layouts.header_jsp:97) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
     at org.mortbay.jetty.servlet.Dispatcher.include(Dispatcher.java:192) 
     at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:1013) 
     at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:698) 
     at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:80) 
     at org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:73) 
     at org.apache.tiles.context.TilesRequestContextWrapper.dispatch(TilesRequestContextWrapper.java:72) 
     at org.apache.struts2.tiles.StrutsTilesRequestContext.dispatch(StrutsTilesRequestContext.java:88) 
     at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:283) 
     at org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:140) 
     at org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:117) 
     at org.apache.tiles.jsp.taglib.RenderTagSupport.execute(RenderTagSupport.java:154) 
     at org.apache.tiles.jsp.taglib.RoleSecurityTagSupport.doEndTag(RoleSecurityTagSupport.java:75) 
     at org.apache.tiles.jsp.taglib.ContainerTagSupport.doEndTag(ContainerTagSupport.java:80) 
     at org.apache.jsp.WEB_002dINF.views.layouts.bodyWithSidebar_jsp._jspx_meth_tiles_insertAttribute_0(org.apache.jsp.WEB_002dINF.views.layouts.bodyWithSidebar_jsp:121) 
     at org.apache.jsp.WEB_002dINF.views.layouts.bodyWithSidebar_jsp._jspService(org.apache.jsp.WEB_002dINF.views.layouts.bodyWithSidebar_jsp:58) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
     at org.mortbay.jetty.servlet.Dispatcher.include(Dispatcher.java:192) 
     at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:1013) 
     at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:698) 
     at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:80) 
     at org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:73) 
     at org.apache.tiles.context.TilesRequestContextWrapper.dispatch(TilesRequestContextWrapper.java:72) 
     at org.apache.struts2.tiles.StrutsTilesRequestContext.dispatch(StrutsTilesRequestContext.java:88) 
     at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:606) 
     at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:280) 
     at org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:140) 
     at org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:117) 
     at org.apache.tiles.jsp.taglib.RenderTagSupport.execute(RenderTagSupport.java:154) 
     at org.apache.tiles.jsp.taglib.RoleSecurityTagSupport.doEndTag(RoleSecurityTagSupport.java:75) 
     at org.apache.tiles.jsp.taglib.ContainerTagSupport.doEndTag(ContainerTagSupport.java:80) 
     at org.apache.jsp.WEB_002dINF.views.layouts.main_jsp._jspx_meth_tiles_insertAttribute_0(org.apache.jsp.WEB_002dINF.views.layouts.main_jsp:473) 
     at org.apache.jsp.WEB_002dINF.views.layouts.main_jsp._jspService(org.apache.jsp.WEB_002dINF.views.layouts.main_jsp:157) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
     at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327) 
     at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) 
     at org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:198) 
     at org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:179) 
     at org.apache.tiles.context.TilesRequestContextWrapper.dispatch(TilesRequestContextWrapper.java:72) 
     at org.apache.struts2.tiles.StrutsTilesRequestContext.dispatch(StrutsTilesRequestContext.java:88) 
     at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:606) 
     at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:246) 
     at org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:105) 
     at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) 
     at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277) 
     at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) 
     at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
     at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
     at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498) 
     at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
     at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) 
     at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
     at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
     at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
     at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67) 
     at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
     at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
     at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101) 
     at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
     at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
     at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91) 
     at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
     at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
     at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278) 
     at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
     at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
     at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89) 
     at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
     at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
     at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) 
     at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
     at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
     at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175) 
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236) 
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
     at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) 
     at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
     at org.mortbay.jetty.Server.handle(Server.java:326) 
     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536) 
     at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:915) 
     at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) 
     at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405) 
     at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

私はコントローラ/アクションメソッドを確保するのに最適な場所ではありませんが、よくある質問で説明した障害が@Securedということであると春のセキュリティFAQで読みます注釈は機能しません。つまり、メソッドは保護されません。

私の場合、そのメソッドに達する前でも、私はnullの値を取得します。 execute()は保護されておらず、editUser()だけであり、まだ呼び出されていません。

私は、誰かが同じ経験を持ち、解決策を見つけたことを願っています..ありがとう。

アップデート:これが役立つ場合 私は疑問に思う:Spring Security - how I can enable Method Security annotations?

マイActionクラスは、現在、私も共通の機能を置くBaseActionクラスを拡張..

+2

ROLE_ADMINを使用するとうまくいきましたが、今では(TEST_ADMINで)そうではありません。 –

+3

注釈またはセキュリティフィルタを削除しようとしましたが、実際に問題がSpring Securityフィルタからであり何か他のものではないことを確認しましたか?また、説明のため、 'currentPage'変数は' ValueStack'自体ではなく 'null'です。アクションクラスのコードをすべて投稿しましたが、実際には 'getCurrentPage()'メソッドがあると仮定していますか? – rees

+0

currentPageのゲッターメソッドが見つからない場合、Spring SecurityがNullPointerExceptionで失敗することは本当に正直ではありません。 PropertyNotFoundなんかで失敗する方がいいでしょう。しかし、なぜValueStack全体がnullであると結論付けたのか分かりません。 –

答えて

2

私はちょうどあなたの場合、この問題が発生し、疑問に思いますSpring Securityのデフォルト構成を使用してください。ここでは、ROLE_という接頭辞が必要です。

この質問を参照してください:あなたは、デフォルトの設定の魔女を使用している How do I use custom roles/authorities in Spring Security?

は、役割が「ROLE_」接頭辞で始まることを期待しています。Spring Security Role Prefix and Custom User Details Service

<beans:bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter"> 
    <beans:property name="rolePrefix" value="" /> 
</beans:bean> 

関連した質問:

構成例をカスタムセキュリティ設定を追加して設定する必要があります

1

これはあなたの質問に直接答えることはできませんが、Spring 3 MVC Controllerをアノテーションとともに使用し、一致するSpring Securityバージョンを使用すると、統合の時間が大幅に短縮されます。これにより、より速く開発でき、コントローラのXML設定が途切れてしまうという追加の利点が得られ、切り替えに数分かかるだけです。実装までの距離によっては、これがオプションになる場合もあります。通常、Springアノテーションは、Spring管理対象Bean内にある場合、またはコンパイル時または実行時に非Springクラスへの依存関係を織り込む場合にのみ機能します。

2

stacktraceは、タグに問題がある 'header.jsp'ファイルの問題を示します。私はあなたが単にタグの式でnullpointerの問題があると思う。 header.jspのJSPスニペットを共有できますか?

1

私はすでにこのようなプロジェクトで作業しました。 Struts 2、Spring 3.0.0、Spring Securityを使用しました。

私はあなたが@ org.springframework.stereotype.Controllerでstrutsアクションに注釈を付けることを試みることができると思います。これはSpringのStruts Actionを管理する現在の方法です。あなたが関連していた春のセキュリティ問題を修正すると思います。

私はこのアーキテクチャについて別のことを覚えています。 web.xmlでは、Struts 2フィルタの前に春のリスナーとフィルタを設定する必要があります。私の古いプロジェクトが見つかりました。私のweb.xmlはこのようなものでした:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="starter" version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

    <display-name>Onleague.com</display-name> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:META-INF/app-context.xml</param-value> 
    </context-param> 

    <!-- Spring --> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</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> 

    <filter> 
     <filter-name>openSessionInViewFilter</filter-name> 
     <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> 
    </filter> 

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

    <!-- Struts 2 --> 
    <filter> 
     <filter-name>action2-cleanup</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>action2-cleanup</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 
    <filter> 
     <filter-name>action2</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>action2</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

    <!-- Sitemesh -->  
    <filter> 
     <filter-name>sitemesh</filter-name> 
     <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>sitemesh</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

    <!-- Servlets --> 
    <servlet> 
     <servlet-name>dwr</servlet-name> 
     <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> 
     <init-param> 
      <param-name>debug</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </servlet> 
    <servlet> 
     <servlet-name>jspSupportServlet</servlet-name> 
     <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class> 
     <load-on-startup>5</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dwr</servlet-name> 
     <url-pattern>/dwr/*</url-pattern> 
    </servlet-mapping> 


    <!-- Welcome file lists --> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>default.jsp</welcome-file> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

</web-app> 

幸運!

関連する問題