2017-06-09 8 views
0

私は、ショーケースの実装から派生したSpring Java Configurationに基づくSpring MVCでHDIVを使用しています。設定が読み込まれますが、保護されたURL、つまり「/ messages/message」にアクセスしようとすると、常に不正アクセスエラーHDIV_PARAMETER_DOES_NOT_EXISTが発生します。 HDIV処理からURLを除外するように設定を変更すると動作しますが、これはもちろんオプションではありません。HDIV + Spring MVC - 常に不正アクセスエラーを取得するHDIV_PARAMETER_DOES_NOT_EXIST

誰かが私が逃したアイデアですか?

  • hdiv example showcase configuration code
  • ログファイルのエラー文の

    10:04:17.304 [http-nio-8080-exec-22] INFO org.hdiv.logs.Logger - HDIV_PARAMETER_DOES_NOT_EXIST;/spring-security-example/messages/message;_HDIV_STATE_;;;127.0.0.1;127.0.0.1;megloff; 
    

    Javaの設定

    @Configuration 
    @EnableHdivWebSecurity 
    public class HdivSecurityConfig extends HdivWebSecurityConfigurerAdapter { 
    
        @Override 
        public void configure(SecurityConfigBuilder builder) { 
        } 
    
        @Override 
        public void addExclusions(ExclusionRegistry registry) { 
        registry.addUrlExclusions("/").method("GET"); 
        registry.addUrlExclusions("/login"); 
        registry.addUrlExclusions("/logout"); 
        registry.addUrlExclusions("/static/.*"); 
        registry.addParamExclusions("_csrf"); 
    
    
        // registry.addUrlExclusions("/messages/.*"); <-- would allow access, but not an option  
        } 
    
        @Override 
        public void configureEditableValidation(ValidationConfigurer validationConfigurer) { 
    
        validationConfigurer.addValidation("/messages/.*"); 
        validationConfigurer.addValidation("/addUser"); 
        } 
    } 
    
    @Configuration 
    @EnableWebMvc 
    @ComponentScan(basePackages = { 
        "ch.megloff.spring.security.example.mvc.controller", 
        "ch.megloff.spring.security.example.mvc.action", 
        "ch.megloff.spring.security.example.repository", 
        "ch.megloff.spring.security.example.listener", 
        "ch.megloff.spring.security.example.service"}) 
    public class SpringMVCConfiguration extends WebMvcConfigurerAdapter { 
    
        @Autowired 
        @Qualifier("hdivEditableValidator") 
        private Validator hdivEditableValidator; 
    
        @Override 
        public Validator getValidator() { 
        return hdivEditableValidator; 
    } 
    
    ... 
    } 
    
    
    public class SpringWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 
    
        @Override 
        protected Class<?>[] getRootConfigClasses() { 
        return new Class[] { SpringMVCConfiguration.class, SpringHibernateConfig.class, SpringSecurityConfiguration.class, SpringSecurityJDBCConfiguration.class, SpringWebFlowConfig.class, HdivSecurityConfig.class }; 
    } 
    
        @Override 
        protected Class<?>[] getServletConfigClasses() { 
        return new Class[] { SpringMVCConfiguration.class }; 
        } 
    
        @Override 
        protected String[] getServletMappings() { 
        return new String[] { "/" }; 
        } 
    
        public void onStartup(ServletContext container) throws ServletException { 
        super.onStartup(container); 
    
        container.addFilter("ValidatorFilter", ValidatorFilter.class).addMappingForUrlPatterns(
          EnumSet.of(DispatcherType.REQUEST), false, "/*"); 
    
        container.addListener(new InitListener()); 
        } 
    } 
    

    答えて

    1

    解決策が見つかりました。 HDIVでは、すべてのリンクがURLの "_HDIV_STATE_"パラメータで充実している必要があります。そのためには元のJSTL taglibではなく、HDIVからtaglibを使用する必要があります。

    JSTLに関するHDIVのreference documentationも参照してください

    例えばあなたのPOMで

    あなたのJSP(のtaglib文で「www.hdiv.org」に注意してください)

    <%@ taglib prefix="c" uri="http://www.hdiv.org/jsp/jstl/core"%> <c:url value="/messages/messages" var="url" /> <li><a href="${url}">Messages</a></li>

    にだからあなたは番目の<c:url>ユーティリティタグを介してURLをレンダリングする必要があります。これは、別のオプションがあってもよい必要HDIVパラメータすなわち有するURL

    localhost:8080/spring-security-example/messages/message?_HDIV_STATE_=26-0-830046F08D66980D1B35F52F2D6677E0 
    

    はHDIV からユーティリティクラスを使用することで、その後HDIV

    LinkUrlProcessor urlProcessor = HDIVUtil.getLinkUrlProcessor(servletContext); 
    String processUrl = urlProcessor.processUrl(request, "/messages/messages"); 
    
    のgithubのリポジトリにクラス LinkUrlProcessorを参照してレンダリング
    関連する問題