启用springboot security后登录web页面需要用户名和密码的解决方法

启用 SpringBoot Security 后登录 Web 页面需要用户名和密码的解决方法主要涉及到如何添加用户和授权认证的过程。

添加用户

可以通过在 application.yml 文件中配置用户名和密码来添加用户:

spring:
  security:
    user:
      name: admin # 用户名
      password: password # 密码
      roles: ADMIN # 用户角色

以上配置将会创建一个名为 admin 的用户,密码为 password,角色为 ADMIN。

若需要添加其它用户,可以通过添加类似的配置来实现。

授权认证

添加用户后,我们需要对用户的访问权限进行授权认证。该过程主要包括三个步骤:

1. 定义用户角色

角色是一些操作的集合,我们可以使用 @PreAuthorize 注解来指定用户需要具有的角色才能进行相关操作:

@RestController
@RequestMapping("/api")
public class UserController {

    @PreAuthorize("hasRole('ADMIN')")
    @GetMapping("/users")
    public List<User> getUsers() {...}

    //...
}

以上代码表示,用户需要具有 ADMIN 角色才能访问 GET /api/users 接口。

2. 启用权限认证

我们需要在安全配置类中启用权限认证:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

    //...
}

以上代码表示,我们对所有请求启用了身份认证,并启用了表单登录方式(默认登录路径为 /login)。

3. 添加用户认证信息

我们需要为用户添加认证信息,如用户名、密码和角色等信息。我们可以通过实现 UserDetailsService 接口来实现:

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) {

        List<GrantedAuthority> authorities = new ArrayList<>();
        authorities.add(new SimpleGrantedAuthority("ADMIN"));

        return new User("admin", "password", authorities);
    }
}

以上代码表示,我们使用硬编码的方式为名为 admin 的用户添加了 ADMIN 角色,用户名为 admin,密码为 password。

示例1:添加多个用户

如果想添加多个用户,可以在配置文件中添加类似如下的配置:

spring:
  security:
    user:
      name: admin
      password: password
      roles: ADMIN

      name: user1
      password: password1
      roles: USER

示例2:使用数据库记录用户认证信息

如果想使用数据库记录用户认证信息,可以在 UserDetailsServiceImpl 中实现。以下是一个例子:

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) {

        User user = userRepository.findByName(username);

        if(user == null) {
            throw new UsernameNotFoundException("User not found");
        }

        List<GrantedAuthority> authorities = new ArrayList<>();
        user.getRoles().forEach(role -> {
            authorities.add(new SimpleGrantedAuthority(role.getName()));
        });

        return new User(user.getName(), user.getPassword(), authorities);
    }
}

以上代码可以从数据库中查询出名为 username 的用户信息,将其角色信息添加到用户认证信息中。其中,User 表示数据库中用户记录的实体类,UserRepository 则是一个 JPA 接口,用于从数据库中查询用户信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:启用springboot security后登录web页面需要用户名和密码的解决方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • php自动识别文字编码并转换为目标编码的方法

    PHP自动识别文字编码及转换方法攻略 在PHP中,处理中文字符时,常常会遇到文字编码不一致的问题,本文将为你介绍一种PHP自动识别文字编码并转换为目标编码的方法。 Step 1:获取需要转换的文字 获取需要转换的文字,比如从用户提交的表单数据中获取文本信息。在获取之后,需要先判断编码格式,这里使用PHP的mb_detect_encoding()函数进行自动检…

    Java 2023年6月1日
    00
  • SpringCloud Alibaba框架介绍

    SpringCloud Alibaba框架介绍 什么是SpringCloud Alibaba SpringCloud Alibaba 是一套基于 SpringCloud 体系的微服务工具集,包含了 SpringCloud 的服务治理体系、服务网关、SpringCloud Config 等组件,还包含了阿里巴巴公司自主开发的多项服务治理产品,例如 Nacos …

    Java 2023年6月2日
    00
  • 如何使用JSP连接DB2数据库

    下面是使用JSP连接DB2数据库的完整攻略: 1. 配置DB2数据库和JDBC驱动 使用JSP连接DB2数据库需要先配置好数据库和JDBC驱动。这里以在Windows操作系统下为例子: 安装DB2数据库。安装过程不再赘述,安装完成后需要设置数据库登录账户和密码并启动服务。 下载DB2 JDBC驱动程序。可以在IBM的官网下载:https://www.ibm.…

    Java 2023年6月15日
    00
  • JavaWeb项目音频资源播放实现方法详解

    JavaWeb项目音频资源播放实现方法详解 在JavaWeb项目开发中,如何实现音频资源的播放,是一个比较常见的需求。下面将介绍JavaWeb项目音频资源播放实现方法的详细攻略。 1. 前端实现 在前端页面上,我们可以通过HTML5的audio标签来实现音频资源的播放。 1.1 页面结构 <!doctype html> <html lang…

    Java 2023年6月15日
    00
  • Java多线程的实现方式比较(两种方式比较)

    Java多线程是Java程序中常见的高级特性,使用多线程可以让程序同时执行多个任务,提高程序的效率。Java中多线程的实现方式主要有两种,一种是继承Thread类,一种是实现Runnable接口。下面我们来详细讲解这两种实现方式的比较。 继承Thread类的实现方式 继承Thread类是Java中自带多线程的一种实现方式,需要创建一个继承自Thread类的类…

    Java 2023年5月18日
    00
  • 常见的线程池调度算法有哪些?

    以下是关于常见的线程池调度算法的完整使用攻略: 常见的线程池调度算法 常见的线程调度算法以下几种: 1. 固定大小线程池 固定大小线程池是指线程池中的线程数量是固定的,不随着任务的增加而增加。当线程池中的线程都在执行任务时,新的任务会被放入任务队列中等待。 以下是一个使用固定大小线程池的示例: ExecutorService executorService …

    Java 2023年5月12日
    00
  • Springmvc加ajax实现上传文件并页面局部刷新

    首先,上传文件是指将文件从客户端传输到服务器端,而Springmvc是一种轻量级的mvc框架。在本文中,将会介绍如何利用Springmvc和ajax实现文件上传和页面局部刷新。 一、环境准备 实现文件上传需要用到Springmvc和Spring的MultipartResolver组件,因此需要在pom.xml文件中引入相关依赖。 <!– Spring…

    Java 2023年6月15日
    00
  • Java MyBatis 多表查询详解

    首先我会先为大家讲解一下Java MyBatis多表查询的基础知识,然后再通过两个具体的实例进行详细说明。 什么是Java MyBatis Java MyBatis是一款优秀的开源数据持久层框架,它支持定制化SQL、存储过程和高级映射。MyBatis避免了几乎所有JDBC代码和手动设置参数以及获取结果集的工作。相对于传统的Hibernate等ORM框架,My…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部