在过滤器中设置用户主体
Posted
技术标签:
【中文标题】在过滤器中设置用户主体【英文标题】:Setting User Principal in filter 【发布时间】:2018-05-23 21:33:09 【问题描述】:我有一个实现过滤器的身份验证过滤器。
通过将 ServletRequest 类型转换为 HTTPServletRequest,我可以获得 userPrincipal。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
// code to resolve user name from apikey
Principal principal = httpServletRequest.getUserPrincipal();
我的问题是如何设置校长?这样我就可以传入经过身份验证的用户名;
还是应该使用 HttpServletRequestWrapper 将名称作为附加参数传递?
【问题讨论】:
通常,当您正确配置安全性时,容器会自动设置用户主体 如果应用程序已禁用spring security,如何手动设置主体? 【参考方案1】:实际上我没有意识到 HttpServletRequestWrapper 有我可以覆盖的 getUserPrincipal() 方法
【讨论】:
【参考方案2】:假设您在禁用弹簧安全性时需要委托人在场。请参阅以下链接以禁用安全性https://***.com/a/61120549/6459098
我们需要如下拦截器和 UserDetailsService 来为每个请求设置自定义主体。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception
if(request.getUserPrincipal()==null)//initially no principal found
request.login("uname", "pwd");//add principal to request
return true;
然后
@Component
class UserDetailsServiceTools implements UserDetailsService
@Override
public UserDetails loadUserByUsername(String username)
// TODO Auto-generated method stub
return User.withUsername(username).password("nooppwd").roles("User").build();
【讨论】:
以上是关于在过滤器中设置用户主体的主要内容,如果未能解决你的问题,请参考以下文章