spring security自定义数据库表结构

在用spring security对用户进行安全认证的时候,碰到一个很头疼的问题,spring security是使用其默认数据库表结构的,默认表为users,其实嫌麻烦的话,直接使用这个默认配置也是可以的,但是我的项目里已经有了表结构规范,这个时候就需要改变其默认的表结构,以下为securityConfig.java的代码,通过覆盖JdbcDaoImpl中的usersByUsernameQuery和authoritiesByUsernameQuery的sql语句更改默认的用户表users:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import javax.sql.DataSource;

/**
 * 安全配置类.
 *
 */
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * 自定义配置
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/css/**", "/js/**", "/static/fonts/**").permitAll() // 都可以访问
            .antMatchers("/index","/").hasRole("ADMIN")   // 需要相应的角色才能访问
            .and()
            .formLogin()   //基于 Form 表单登录验证
            .loginPage("/login").failureUrl("/login-error"); // 自定义登录界面
    }

    @Autowired
    private DataSource dataSource;

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSource)
                .usersByUsernameQuery("select userid,userpassword,enableflag "
                        +"from ftp_user where userid=?")
                .authoritiesByUsernameQuery("select username, authority "
                        +"from authorities where username=?");
    }
}

这里的dataSource是通过添加@Autowired注解注入的。

你可能感兴趣的:(笔记)