Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将自定义筛选器添加到Spring Security后用于验证的空web表单_Java_Spring_Validation_Spring Mvc_Authentication - Fatal编程技术网

Java 将自定义筛选器添加到Spring Security后用于验证的空web表单

Java 将自定义筛选器添加到Spring Security后用于验证的空web表单,java,spring,validation,spring-mvc,authentication,Java,Spring,Validation,Spring Mvc,Authentication,我有一个Spring4Web应用程序,具有标准身份验证-用户名和密码。对于验证,我使用表单烘焙bean javax.validation和Hibernate validator: import org.hibernate.validator.constraints.NotEmpty; import javax.validation.constraints.Size; public class SignupForm { @Size(min = 6, message = "must be

我有一个Spring4Web应用程序,具有标准身份验证-用户名和密码。对于验证,我使用表单烘焙bean javax.validation和Hibernate validator:

import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Size;

public class SignupForm {

    @Size(min = 6, message = "must be at least 6 characters")
    private String password;

    @NotEmpty
    private String email;

    // get / set methods
}
然后在SpringSecurity中,我有了一个标准配置,这对我来说很有用

以下是我如何在控制器中使用它,以及它的工作原理:

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String createRecruiter(@ModelAttribute("signUpForm") @Valid SignupForm signupForm,
        BindingResult formBinding, HttpServletRequest request) {

    if (formBinding.hasErrors()) {
        UiUtil.addError(request, EntryError.SINGUP_VALIDATION_ERROR);
        return DEFAULT_REDIRECT;
    }
    // rest of the method is not important
 }
现在我想使用HMAC身份验证打开我的API供公众使用。为了这个目的,我跟随。在本文中,它简化了,因此没有关于如何处理多个身份验证提供者之类的示例

您可以看到,您需要将REST身份验证的自定义过滤器添加到Spring配置的过滤器链中

在Spring上下文配置类中:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    // standard configuration
    .and()
        .addFilterBefore(new RestSecurityFilter(authenticationManager()), UsernamePasswordAuthenticationFilter.class);
我还将身份验证提供程序添加到身份验证管理器中,如下所示:

@Autowired
private RestAuthenticationProvider restAuthProvider;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder());
    auth.authenticationProvider(restAuthProvider);
}
问题是,现在在控制器中,
SignupForm
对象的字段只设置了
null
值,但请求参数设置正确。如果我从配置中删除
RestSecurityFilter
,它就会工作

如何使用链中的
RestSecurityFilter
进行验证

我已经试过了,但没有成功(显然):

  • 已删除自定义身份验证提供程序-
    auth.authenticationProvider(重新授权提供程序)。我认为这可能是一个多
    身份验证提供者的问题
  • RestSecurityFilter
    添加到
    UsernamePasswordAuthenticationFilter
    之前和之后
  • 使
    RestSecurityFilter
    的doFilter方法只执行
    chain.doFilter(请求、响应)

    • 以下几点意见可能会有所帮助:

      • 我会使用SpringMVC拦截器,而不是
        过滤器。这是一款更高级的spring mvc natvie
      • 对于RESTful服务,不应该使用“表单”术语,也不应该在出现错误时重定向(应该返回正确的错误响应)
      • 签名中不需要
        ModelAttribute