19. Spring Boot配置最基础的数据库存储的用户登录

0. 前置环境

代码分层结构如下图所示:


代码分层结构

1. 创建用户信息的实体

该类是一个entity,对应的是数据库中存储的登录用户的信息。我们将其命名为SystemUserInfo。当我们通过@Entity注解了该类的时候,由于JPA的支持可以自动在数据库中生成一个对应的表。

2. 通过Jpa实现数据库内用户表的接口层和服务层

接口层使用@Repository注解,并继承JpaRepository<SystemUserInfo, String>。通过这种方式实现了一个很薄的数据库访问层。

服务层使用@Service注解,并在服务层中注入对应的数据库接口对象。通过这一层就可以直接使用数据库访问接口中的方法,尤其是后续要用到的通过用户名获取用户信息实体的方法。

3. 实现认证和鉴权服务层

该层本质上也是一个服务层。在该层中注入数据库服务层的实例。并实现Spring Security的UserDetailsService接口的loadUserByUsername方法。该方法通过前台传入的用户名加载系统内存储的用户,并进行认证信息的比较。只需要简单的实现就可以了。一个例子如下:

@Service
@Slf4j
public class SystemUserDetailsService implements UserDetailsService{

    @Autowired
    private SystemUserAccessService systemUserAccessService;

    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
        log.info("登录的用户名是:{}", userName);
        return new User(userName, systemUserAccessService.getUserByName(userName).getPassword(),
                AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
    }
}

一旦作为服务层在应用中生效,那么随着登录时候输入用户名和密码,Spring Security会用输入的用户名通过注入的实例获取据库中这样的用户实体,并把用户名,密码,角色等包装成Spring Security自己的User对象返回给框架。框架会拿这个信息和页面的实际输入进行对比,进而控制登入或者报错。

4. 对项目开启Web网络安全控制

  • 添加了自定义网络配置类并使之生效,继承WebSecurityConfigurerAdapter类。其中的配置要满足类似的复写形式。
@Configuration
@EnableWebSecurity
public class SystemWebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest()
                .authenticated().and()
                .formLogin();
    }
}

5. 验证功能

从浏览器中访问rest接口,会自动跳转到登录页面。


登录页面

我们输入一个数据库存储的用户,那么就会跳转到我们实际访问的页面了。

跳转到登录前的页面
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容