【问题标题】:HDIV + Spring MVC - getting always Unauthorized Access error HDIV_PARAMETER_DOES_NOT_EXISTHDIV + Spring MVC - 总是出现未经授权的访问错误 HDIV_PARAMETER_DOES_NOT_EXIST
【发布时间】:2017-06-09 23:07:58
【问题描述】:

我正在使用基于 Spring Java 配置的 HDIV 和 Spring MVC,我从他们的展示实现中派生出来。配置已加载,但当我尝试访问受保护的 URL 时,即“/messages/message”,我总是收到未经授权的访问错误 HDIV_PARAMETER_DOES_NOT_EXIST。当我更改配置以从 HDIV 处理中排除 URL 时它可以工作,但这当然不是一个选项

有人知道我错过了什么吗?

日志文件错误说明

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());
  }
}

【问题讨论】:

    标签: java spring-mvc security servlets hdiv


    【解决方案1】:

    我找到了解决方案。 HDIV 要求在其 URL 中使用“_HDIV_STATE_”参数丰富所有链接。为了实现这一点,您必须使用 HDIV 中的 taglib 而不是原始的 JSTL taglib。

    关于JSTL,另请参考HDIV的reference documentation

    例如在你的 POM 中

        <dependency>
            <groupId>org.hdiv</groupId>
            <artifactId>hdiv-jstl-taglibs-1.2</artifactId>
            <version>${org.hdiv-version}</version>
        </dependency>
    

    例如在您的 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>

    因此,您需要通过 &lt;c:url&gt; 实用程序标签呈现 URL。这会呈现带有所需 HDIV 参数的 URL,即

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

    另一个选项可能是使用 HDIV 中的实用程序类 在 hdiv 的 github 存储库中查看 class LinkUrlProcessor

    LinkUrlProcessor urlProcessor = HDIVUtil.getLinkUrlProcessor(servletContext);
    String processUrl = urlProcessor.processUrl(request, "/messages/messages");
    

    【讨论】:

      猜你喜欢
      • 2016-11-30
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多