Spring安全性从httpServletRequest移除RemoteUser

时间:2018-04-06 12:38:57

标签: spring-boot spring-security

尝试使用apache实现sso。在apache中添加了auth,它通过ajp在spring boot应用程序httpServletRequest.getRemoteUser()中设置用户名。

一旦添加到引导项目的spring安全依赖项无法从httpRequest获取远程用户。

@GetMapping("/sso")
    public String test(HttpServletRequest request, @RequestHeader Map<String, String> headers) {

        String u1 = request.getRemoteUser();

        return "--" + u1 + "--" + headers.toString();
    }

u1给出了在未添加spring安全依赖性时从Apache发送的用户名

在spring security config中给出所有请求的全部许可

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }

在Apache中,从命令添加了一个用户,并在虚拟主机

中添加了以下行到auth
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user

1 个答案:

答案 0 :(得分:0)

最后有一种方法可以从具有spring security的httpRequest.getRemoteUser()中获取用户。

在spring安全性初始化之前添加了一个要调用的过滤器,并将远程用户保存在功能使用的请求范围内。

注册过滤器

    @Bean
    public FilterRegistrationBean registerRequestLogFilter(SSOFilter filter) {
        FilterRegistrationBean reg = new FilterRegistrationBean(filter);
        reg.setOrder(3);
        return reg;
    }

并添加了属性

security.filter-order=5

从保存的过滤器中,请求分数中的用户值稍后使用它进行身份验证。