如何使用java config将Spring Security 3.2配置为使用Dao身份验证和自定义身份验证过滤器

阿比舍克·纳亚克(Abhishek nayak)

我使用dao身份验证和自定义身份验证过滤器搜索了spring安全示例,但发现这些示例都使用xml文件配置,

我的问题是如何配置自定义过滤器,即UsernamePasswordAuthenticationFilter

我的基于xml的securityConfig文件如下所示:

<http auto-config="false" use-expressions="true">

    <intercept-url pattern="/" access="permitAll" />        
    <intercept-url pattern="/auth/login.html" access="permitAll" />     
    <intercept-url pattern="/auth/logout.html" access="permitAll" />        
    <intercept-url pattern="/auth/accessDenied.html" access="permitAll" />      
    <intercept-url pattern="/admin/**" access="hasAnyRole('ROLE_ADMIN')" />
    <intercept-url pattern="/user/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" />


    <access-denied-handler error-page="/auth/accessDenied.html"/>

    <form-login login-page='/auth/login.html' 
        default-target-url="/"
        authentication-success-handler-ref="myAuthenticationSuccessHandler"
        authentication-failure-url="/auth/loginfailed.html" />

    <logout success-handler-ref="myLogoutSuccessHandler"
            invalidate-session="true" delete-cookies="JSESSIONID" />

    <remember-me key="uniqueAndSecret" token-validity-seconds="86400" />

     <session-management session-fixation-protection="migrateSession" 
            session-authentication-error-url="/auth/loginfailed.html"> 
        <concurrency-control max-sessions="1" 
                error-if-maximum-exceeded="true" 
                expired-url="/auth/login.html" 
                session-registry-alias="sessionRegistry"/>
    </session-management>

</http>

<beans:bean id="myAuthenticationSuccessHandler" 
    class="com.asn.handler.AsnUrlAuthenticationSuccessHandler" />

<beans:bean id="myLogoutSuccessHandler" 
    class="com.asn.handler.AsnLogoutSuccessHandler" />

<beans:bean id="userDetailsService" class="com.asn.service.UserDetailsServiceImpl"/>

<authentication-manager alias="authenticationManager">      
    <authentication-provider user-service-ref="userDetailsService"> 
        <password-encoder ref="encoder"/>                      
    </authentication-provider>
    <!-- <authentication-provider>
        <user-service>
            <user name="user1" password="user1Pass" authorities="ROLE_USER" />
            <user name="admin1" password="admin1Pass" authorities="ROLE_ADMIN" />
        </user-service>
    </authentication-provider> -->
</authentication-manager>

<!-- For hashing and salting user passwords -->
<beans:bean id="encoder" 
        class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

我想将配置转换为基于Java的配置。我已经尝试过这样的方法,但它不起作用:

SecurityConfig类:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Resource
    private UserDetailsService userDetailsService;
    @Autowired
    private PasswordEncoder encoder;

    /*@Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)throws Exception {
        logger.info("configureGlobal(AuthenticationManagerBuilder auth) invoked..");
        auth.userDetailsService(userDetailsService).passwordEncoder(encoder);       
    }*/

    @Override
    protected void configure(HttpSecurity http) throws Exception {  
        http.csrf().disable().authorizeRequests()
            .antMatchers("/resources/**","/assets/**","/files/**").permitAll()
            .antMatchers("/auth","/").permitAll()                           

                .anyRequest().authenticated() //every request requires the user to be authenticated
                .and()
            .formLogin() //form based authentication is supported
                .loginPage("/auth/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();

        http.exceptionHandling().accessDeniedPage("/auth/accessDenied");

        http.sessionManagement().sessionFixation().migrateSession()
            .sessionAuthenticationStrategy(concunSessContAuthStr());
    }

    @Bean(name="sessionRegistry")
    public SessionRegistryImpl sessionRegistryBean(){
        logger.info("sessionRegistryBean() invoked..");
        return new SessionRegistryImpl();
    }

    @Bean
    public UsernamePasswordAuthenticationFilter authFilter() throws Exception{
        logger.info("authFilter() invoked.."); 
        CustomUsernamePasswordAuthenticationFilter upaf = new CustomUsernamePasswordAuthenticationFilter();
        upaf.setAuthenticationManager(".."); //here, how to set AuthenticationManager ??
        upaf.setSessionAuthenticationStrategy(concunSessContAuthStr());
        return upaf;
    }


    @Bean
    public DaoAuthenticationProvider customAuthenticationManagerBean() {

        DaoAuthenticationProvider dap = new DaoAuthenticationProvider();
        dap.setUserDetailsService(userDetailsService);
        dap.setPasswordEncoder(encoder);
        return dap;
    }

    @Bean
    public ConcurrentSessionControlAuthenticationStrategy concunSessContAuthStr(){
        logger.info("concunSessContAuthStr() invoked.."); 
        ConcurrentSessionControlAuthenticationStrategy cscas= new ConcurrentSessionControlAuthenticationStrategy(sessionRegistryBean());
        cscas.setMaximumSessions(2);
        cscas.setExceptionIfMaximumExceeded(true);
        return cscas;
    }

}

有什么建议如何配置?

谢谢!

弗拉基米尔·谢弗

为了使用自定义类替换UsernamePasswordAuthenticationFilter,请执行以下操作:

  • 创建一个FormLoginConfigurer具有以下内容的新类org.springframework.security.config.annotation.web.configurers.FormLoginConfigurer不幸,原始内容是最终的,无法进行扩展),请注意对的调用super(new CustomAuthenticationProcessingFilter(),null)

    package demo;
    
    import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
    import org.springframework.security.config.annotation.web.configurers.AbstractAuthenticationFilterConfigurer;
    import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
    import org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter;
    import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
    import org.springframework.security.web.util.matcher.RequestMatcher;
    
    public class FormLoginConfigurer<H extends HttpSecurityBuilder<H>> extends AbstractAuthenticationFilterConfigurer<H,FormLoginConfigurer<H>,UsernamePasswordAuthenticationFilter> {
    
    public FormLoginConfigurer() {
        super(new CustomAuthenticationProcessingFilter(),null);
        usernameParameter("username");
        passwordParameter("password");
    }
    
    public FormLoginConfigurer<H> loginPage(String loginPage) {
        return super.loginPage(loginPage);
    }
    
    public FormLoginConfigurer<H> usernameParameter(String usernameParameter) {
        getAuthenticationFilter().setUsernameParameter(usernameParameter);
        return this;
    }
    
    public FormLoginConfigurer<H> passwordParameter(String passwordParameter) {
        getAuthenticationFilter().setPasswordParameter(passwordParameter);
        return this;
    }
    
    @Override
    public void init(H http) throws Exception {
        super.init(http);
        initDefaultLoginFilter(http);
    }
    
    @Override
    protected RequestMatcher createLoginProcessingUrlMatcher(
            String loginProcessingUrl) {
        return new AntPathRequestMatcher(loginProcessingUrl, "POST");
    }
    
    private String getUsernameParameter() {
        return getAuthenticationFilter().getUsernameParameter();
    }
    
    private String getPasswordParameter() {
        return getAuthenticationFilter().getPasswordParameter();
    }
    
    private void initDefaultLoginFilter(H http) {
        DefaultLoginPageGeneratingFilter loginPageGeneratingFilter = http.getSharedObject(DefaultLoginPageGeneratingFilter.class);
        if(loginPageGeneratingFilter != null && !isCustomLoginPage()) {
            loginPageGeneratingFilter.setFormLoginEnabled(true);
            loginPageGeneratingFilter.setUsernameParameter(getUsernameParameter());
            loginPageGeneratingFilter.setPasswordParameter(getPasswordParameter());
            loginPageGeneratingFilter.setLoginPageUrl(getLoginPage());
            loginPageGeneratingFilter.setFailureUrl(getFailureUrl());
            loginPageGeneratingFilter.setAuthenticationUrl(getLoginProcessingUrl());
        }
    }
    

    }

  • formLogin()从您的configure(HttpSecurity)方法中删除该调用,并使用以下初始化:

     FormLoginConfigurer formLogin = new FormLoginConfigurer();
     http.apply(formLogin);
     formLogin.loginPage("/auth/login")
             .permitAll();
    
  • 身份验证管理器将自动提供给您的实例

  • 您可以SessionAuthenticationStrategy通过调用来自定义班级中使用的http.sessionManagement(),也可以在新逻辑中添加逻辑以FormLoginConfigurer更新所需的内容

另一个选择是将您的CustomUsernamePasswordAuthenticationFilter过滤器注册为其他过滤器:

  • configure(HttpSecurity http)方法调用中:

     http.addFilter(authFilter());
    
  • 确保手动配置过滤器的所有选项

  • 请注意,系统还会在您的用户名之后添加UsernamePasswordAuthenticationFilter的另一个实例

为了添加一个自定义AuthenticationProvider

  • 覆盖方法configure(AuthenticationManagerBuilder auth)并添加提供程序:

     @Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
         auth.authenticationProvider(customAuthenticationManagerBean());
     }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Spring Security中配置自定义身份验证过滤器-使用Java Config

来自分类Dev

使用Spring Security配置自定义LDAP身份验证提供程序

来自分类Dev

具有Spring Security和Java Config的自定义身份验证提供程序

来自分类Dev

如何使用我自己的机制自定义spring-security身份验证过程

来自分类Dev

通过使用AngularJS的自定义登录进行Spring Security身份验证

来自分类Dev

使用Java配置的Spring Security预身份验证

来自分类Dev

运行JUnit测试时Spring Security不调用我的自定义身份验证过滤器

来自分类Dev

自动装配服务在Spring Security Java配置自定义身份验证提供程序中不起作用

来自分类Dev

使用UserDetailsService的Spring Security身份验证

来自分类Dev

使用身份验证回退配置Crowd Spring Security

来自分类Dev

如何使用xml配置文件,JAVA,Spring Security使用LDAP对用户进行身份验证

来自分类Dev

使用Java配置和REST身份验证的Spring Security方法级别的安全性?

来自分类Dev

使用Spring Security无需身份验证和授权

来自分类Dev

Spring boot、Security、OAuth2:是否可以使用自定义 AuthorizationCodeResourceDetails?身份验证服务器需要重定向 url 中的特定参数

来自分类Dev

来自自定义表的Spring Security身份验证

来自分类Dev

Spring Security身份验证提供程序Java配置

来自分类Dev

Java Spring Security配置-多个身份验证提供程序

来自分类Dev

使用Spring Boot 2和Spring Security 5进行多重身份验证

来自分类Dev

使用Spring将重定向设置为自定义身份验证失败处理程序

来自分类Dev

使用 JHipster、Spring Security 和 oauth2 控制身份验证重定向

来自分类Dev

将LDAP和DB身份验证与Spring Security结合使用

来自分类Dev

使用Spring Security + Spring数据+ MongoDB进行身份验证

来自分类Dev

使用Gmail等Spring Security进行两因素身份验证

来自分类Dev

使用Spring Security / Social调试Facebook身份验证

来自分类Dev

使用kerberos / spnego身份验证的Spring Security

来自分类Dev

使用Spring Security身份验证存储userId

来自分类Dev

Firebase 3:使用.net和C#创建自定义身份验证令牌

来自分类Dev

如何使用spring Security通过基于邮件和uid的LDAP对用户进行身份验证?

来自分类Dev

Grails spring 安全身份验证提供程序和自定义过滤器

Related 相关文章

  1. 1

    如何在Spring Security中配置自定义身份验证过滤器-使用Java Config

  2. 2

    使用Spring Security配置自定义LDAP身份验证提供程序

  3. 3

    具有Spring Security和Java Config的自定义身份验证提供程序

  4. 4

    如何使用我自己的机制自定义spring-security身份验证过程

  5. 5

    通过使用AngularJS的自定义登录进行Spring Security身份验证

  6. 6

    使用Java配置的Spring Security预身份验证

  7. 7

    运行JUnit测试时Spring Security不调用我的自定义身份验证过滤器

  8. 8

    自动装配服务在Spring Security Java配置自定义身份验证提供程序中不起作用

  9. 9

    使用UserDetailsService的Spring Security身份验证

  10. 10

    使用身份验证回退配置Crowd Spring Security

  11. 11

    如何使用xml配置文件,JAVA,Spring Security使用LDAP对用户进行身份验证

  12. 12

    使用Java配置和REST身份验证的Spring Security方法级别的安全性?

  13. 13

    使用Spring Security无需身份验证和授权

  14. 14

    Spring boot、Security、OAuth2:是否可以使用自定义 AuthorizationCodeResourceDetails?身份验证服务器需要重定向 url 中的特定参数

  15. 15

    来自自定义表的Spring Security身份验证

  16. 16

    Spring Security身份验证提供程序Java配置

  17. 17

    Java Spring Security配置-多个身份验证提供程序

  18. 18

    使用Spring Boot 2和Spring Security 5进行多重身份验证

  19. 19

    使用Spring将重定向设置为自定义身份验证失败处理程序

  20. 20

    使用 JHipster、Spring Security 和 oauth2 控制身份验证重定向

  21. 21

    将LDAP和DB身份验证与Spring Security结合使用

  22. 22

    使用Spring Security + Spring数据+ MongoDB进行身份验证

  23. 23

    使用Gmail等Spring Security进行两因素身份验证

  24. 24

    使用Spring Security / Social调试Facebook身份验证

  25. 25

    使用kerberos / spnego身份验证的Spring Security

  26. 26

    使用Spring Security身份验证存储userId

  27. 27

    Firebase 3:使用.net和C#创建自定义身份验证令牌

  28. 28

    如何使用spring Security通过基于邮件和uid的LDAP对用户进行身份验证?

  29. 29

    Grails spring 安全身份验证提供程序和自定义过滤器

热门标签

归档