Spring安全性如何正确应用过滤器以从URL

时间:2018-02-23 00:01:32

标签: java spring spring-security

在Spring安全性中,我需要使用来自尝试访问的用户的站点的param进行自定义身份验证,例如:

用户尝试访问:

 myapp.com/res?param=value

在身份验证过程中,我需要来自param的value,我该如何获取?

此外,我还需要自定义UserDetailsService param

我正在尝试这样的事情:

 public class MyFilter extends UsernamePasswordAuthenticationFilter {


@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
        throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) arg0;
    System.out.println("\n\n"+request.getRequestURI().substring(request.getContextPath().length()) +"\n\n");
    super.doFilter(arg0, arg1, arg2);
     }
 }

我说的是:

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.addFilterAfter(
              new MyFilter(),  BasicAuthenticationFilter.class);    

    http
    .authorizeRequests()
        .anyRequest().authenticated()
        .and()
    .formLogin()
        .and()
    .httpBasic();       
}

此过滤器会使用我的参数打印网址,但我如何在自定义UserDetailsService中提供此功能?另外,我不确定这个过滤器是否正确。

我使用 spring-security 5.0.0 spring 5.0.2

谢谢,

1 个答案:

答案 0 :(得分:0)

  

我如何在自定义UserDetailsService中提供此内容?

使用Spring内置请求处理程序。

@RestController
public class UserDetailService {

    @RequestMapping(value = "/res", method = RequestMethod.GET)
    public void getRes(
       @RequestParam(required = false, defaultValue = "value", value="param") final String param) {

         // param contains the value of the parameter in the URL

    }
}

有关此hereherehere的更多信息。

您应该仅使用filter来验证请求并在需要时阻止它们。

所有业务逻辑都应在@Controller@Service类中实现。