小弟,在spring security中加入了 access-denied-page这个配置项,结果就开始报错了!!!从报错的内容来说,好像是说 access-denied-page这个配置项本该是由spring security来拦截,结果却被struts2拦截,网上找了好久也没找到完美的答案,有一个参考是说要在struts.xml中加入security拦截器,小弟,加上之后,还是继续报错了,毛了,请高手解决!!谢过!报错内容
HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionorg.apache.jasper.JasperException: The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:532)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.security.ui.AccessDeniedHandlerImpl.handle(AccessDeniedHandlerImpl.java:65)
org.springframework.security.ui.ExceptionTranslationFilter.handleException(ExceptionTranslationFilter.java:171)
org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:117)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:185)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)root causeThe Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)
org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44)
org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)
org.apache.jsp.admin_jsp._jspx_meth_s_005fform_005f0(admin_jsp.java:120)
org.apache.jsp.admin_jsp._jspService(admin_jsp.java:76)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.security.ui.AccessDeniedHandlerImpl.handle(AccessDeniedHandlerImpl.java:65)
org.springframework.security.ui.ExceptionTranslationFilter.handleException(ExceptionTranslationFilter.java:171)
org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:117)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:406)
org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:185)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)note The full stack trace of the root cause is available in the Apache Tomcat/7.0.6 logs.
Apache Tomcat/7.0.6

解决方案 »

  1.   

    这个是struts.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts><constant name="struts.ui.theme" value="simple" />
    <constant name="struts.multipart.saveDir" value="/tmp"/> <constant name="struts.devMode" value="true" />
    <constant name="struts.i18n.encoding" value="UTF-8"/><package name="exception" extends="struts-default">
    <global-results> 
    <result name="accessException">/accessDenied.jsp</result> 
    </global-results> <!-- 捕获AccessDeniedException,并转到相应的页面--> 
    <global-exception-mappings> 
    <exception-mapping result="accessException" exception="org.springframework.security.AccessDeniedException" name="accessException"></exception-mapping> 
    </global-exception-mappings> 
    </package><package name="order" extends="struts-default" namespace = "">  

    <action name="order" class = "order" >
    <result name = "listOrders">/listOrders.jsp</result>
    <result name = "deal">/dealOrder.jsp</result>

    <result name = "generateOrder">/generateOrder.jsp</result>
    <result name="invalid.token">/generateOrder.jsp</result> 

    <interceptor-ref name="defaultStack" />
                <interceptor-ref name="token">
                 <param name="excludeMethods">list*,deal*</param>
                </interceptor-ref>
               
                
    </action>

    <action name="orderPreview" class = "orderPreview">
    <result name = "preview">/preview.jsp</result>
    </action>

    <action name="alipay" class = "alipay">
    <result name = "begin">/alipay.jsp</result>
    <result>/alipayto.jsp</result>
    </action>

    </package><package name="user" extends = "struts-default" namespace = "/user">
    <action name="user" class = "user">
    <result>/showProduct.jsp</result>
    </action>
    </package><package name="ajaxStatus"  extends="json-default"> <!--  AJAX执行的功能,用json返回数据 --> 
    <action name="ajax" class="uddi.action.OrderAction">
    <result type="json"/>
                            
    </action>
    </package> 
    </struts>    
      

  2.   

    这个是security.xml
    <beans:beans xmlns="http://www.springframework.org/schema/security"
      xmlns:beans="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/security
               http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
      

        <http access-denied-page="/AccessDenied.jsp" auto-config='true' >
            <!--<intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY" />
             --><intercept-url pattern="/login.jsp" filters="none" />
            <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
             <intercept-url pattern="/order!findPortalOrders.action" access="ROLE_ADMIN" />
            <intercept-url pattern="/**" access="ROLE_USER" />
            <form-login login-page="/login.jsp"
                    authentication-failure-url="/login.jsp?error=true"
                    default-target-url="/showProduct.jsp" />
            
        </http>



        <authentication-provider>
        
         <!--<password-encoder hash="md5">  
                    <salt-source user-property="username"/>  
            </password-encoder>
                  
            --><jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="select username,password,status as enabled
                                             from user
                                            where username=?"
            authorities-by-username-query="select u.username,r.name as authority
                                                 from user u
                                                 join user_role ur
                                                   on u.user_id=ur.user_id
                                                 join role r
                                                   on r.role_id=ur.role_id
                                                where u.username=?"/>
       </authentication-provider>  
       
       
        <beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <beans:property name="driverClassName" value="${jdbc.driverClassName}"/>
            <beans:property name="url" value="${jdbc.url}"/>
            <beans:property name="username" value="${jdbc.username}"/>
            <beans:property name="password" value="${jdbc.password}"/>
        </beans:bean>
    </beans:beans>
      

  3.   

    小弟,经过无数次的验证,终于知道原因了,现将小弟的愚见贴上:
    之所以会出现上述状况,是因为之前我用的框架是spring2.5+spring security2.0,结果我去spring security官网去报bug,结果发现这本身确是是个bug,官网的解释是已经在spring2.5去修复过来了,但是小弟使用的spring2.5要么版本过低,要么就是修复的不是很好。
    所以小弟的解决方法是:
    升级版本:使用spring3.0+spring security3.0,就很好的解决了access-denied-page在spring2.5中不兼容的问题,所以才会被struts2拦截,因为我用的spring2.5根本就没有这个拦截器.天啊!!!又是一个版本不兼容问题 
      

  4.   

    哥们,现在我也在搞这个Spring security,真是头大啊,照着文档,却一点思路都没有,哥们可以给我一个最简单的Demo吗?