在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
谢谢,
答案 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
}
}
您应该仅使用filter
来验证请求并在需要时阻止它们。
所有业务逻辑都应在@Controller
和@Service
类中实现。