程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用于Siteminder的Spring Security Java Config大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决用于Siteminder的Spring Security Java Config?

开发过程中遇到用于Siteminder的Spring Security Java Config的问题如何解决?下面主要结合日常开发的经验,给出你关于用于Siteminder的Spring Security Java Config的解决方法建议,希望对你解决用于Siteminder的Spring Security Java Config有所启发或帮助;

通常,提出问题有助于回答问题。

变更:

@H_772_7@anyrequest().hasRole("Roleemployee")

至:

@H_772_7@anyrequest().hasAuthority("Roleemployee")

固定它。

解决方法

@H_696_21@

我有一个可以工作的inMemoryAuthentication配置:

@H_772_7@@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(
            AuthenticationManagerBuilder authenticationManagerBuilder)
            throws Exception {

        authenticationManagerBuilder //
            .inMemoryAuthentication() //
                .withUser("employee") //
                    .password("employee") //
                    .roles("Roleemployee")
        ;

    }

    @Override
    public void configure(WebSecurity webSecurity) throws Exception {
        webSecurity.ignoring().antMatchers("/resources/**");
    }

    @Override
    protected void configure(httpSecurity httpSecurity) throws Exception {
        // @formatter:off

        httpSecurity
            .authorizerequests()
                .antMatchers("/login","/login.request","/logout").permitAll()
                .anyrequest().hasRole("Roleemployee")
        .and()
            .formLogin()
                .loginPage("/login.request")
                .loginProcessingUrl("/login")
                .failureUrl("/login.request?error")
                .permitAll()
        .and()
            .logout()
                .logoutUrl("/logout")
                .permitAll()
                .logoutsuccessUrl("/login.request")
        ;

        // @formatter:on
    }
}

我现在想使用Siteminder身份验证并将其更改为:

@H_772_7@@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    private UserDetailsservice userDetailsservice;  
    private PreAuthenticatedAuthenticationProvider preAuthenticatedProvider;

    public WebSecurityConfiguration() {
        super();

        userDetailsservice = new CustomUserDetailsservice();
        UserDetailsByNameserviceWrapper<PreAuthenticatedAuthenticationToken> wrapper = new UserDetailsByNameserviceWrapper<PreAuthenticatedAuthenticationToken>(
                userDetailsservicE);

        preAuthenticatedProvider = new PreAuthenticatedAuthenticationProvider();
        preAuthenticatedProvider.setPreAuthenticatedUserDetailsservice(wrapper);
    }


    @Override
    protected void configure(
            AuthenticationManagerBuilder authenticationManagerBuilder)
            throws Exception {


        // @formatter:off
        authenticationManagerBuilder //
            .authenticationProvider(preAuthenticatedProvider);
        // @formatter:on
    }

    @Override
    public void configure(WebSecurity webSecurity) throws Exception {
        webSecurity.ignoring().antMatchers("/resources/**");
    }

    @Override
    protected void configure(httpSecurity httpSecurity) throws Exception {
        // @formatter:off

        requestHeaderAuthenticationFilter siteMinderFilter = new requestHeaderAuthenticationFilter();
        siteMinderFilter.setAuthenticationManager(authenticationManager());

        httpSecurity
            .addFilter(siteMinderFilter)
            .authorizerequests()
                .antMatchers("/login","/logout").permitAll()
                .anyrequest().hasRole("Roleemployee")
        .and()
            .formLogin()
                .loginPage("/login.request")
                .loginProcessingUrl("/login")
                .failureUrl("/login.request?error")
                .permitAll()
        .and()
            .logout()
                .logoutUrl("/logout")
                .permitAll()
                .logoutsuccessUrl("/login.request")
        ;

        // @formatter:on
    }
}

现在,CustomUserDetailsS​​ervice始终返回具有雇员角色的用户:

@H_772_7@public class CustomUserDetailsservice implements
        UserDetailsservice {
    @Override
    public UserDetails loadUserByUsername(String userName)
            throws UsernameNotFoundException {
        List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
        SimpleGrantedAuthority authority = new SimpleGrantedAuthority("Roleemployee");
        authorities.add(authority);

        UserDetails user = new User(username,"password",authorities);
        return user;    
    }
}

当我对此进行测试时,将正确传入SM_USER标头,并且可以在调试器中看到正确调用了CustomUserDetailsS​​erice,但是对于以前在旧配置下能够成功访问的任何页面,都返回403禁止状态。

此配置有问题吗?

大佬总结

以上是大佬教程为你收集整理的用于Siteminder的Spring Security Java Config全部内容,希望文章能够帮你解决用于Siteminder的Spring Security Java Config所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。