启用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日

相关文章

  • 支持Java 14!Java开发工具IntelliJ IDEA 2020.1稳定版发布

    下面是关于“支持Java 14!Java开发工具IntelliJ IDEA 2020.1稳定版发布”的详细攻略: 什么是IntelliJ IDEA? IntelliJ IDEA是一款由JetBrains开发的Java和其他编程语言的集成开发环境(IDE)。它提供了强大的功能,如代码智能提示、错误检查、重构、版本控制等等,同时也支持许多其他开发技术和框架。In…

    Java 2023年5月19日
    00
  • java生成随机数(字符串)示例分享

    下面是详细的完整攻略: 标题:Java生成随机数(字符串)示例分享 1. 生成随机整数 Java生成随机整数可以通过使用Java中的random类实现。以下是一个示例代码,生成一个1-100之间的随机整数: import java.util.Random; public class GenerateRandomNumber { public static v…

    Java 2023年5月27日
    00
  • 分析jackjson的安全漏洞CVE-2019-14379

    分析Jackjson的安全漏洞CVE-2019-14379可以通过以下几个步骤: 1.了解CVE-2019-14379漏洞的背景和影响 CVE-2019-14379是一个由Jackson-databind 库的反序列化漏洞引发的安全问题。这种漏洞可以让攻击者远程执行任意代码,从而导致服务器遭到攻击、数据丢失或泄露。 2.检查自己的应用程序是否受到漏洞的影响 …

    Java 2023年5月26日
    00
  • 剖析Java中的事件处理与异常处理机制

    剖析Java中的事件处理与异常处理机制 事件处理机制 Java中的事件处理机制是一种将某些动作(例如按钮点击、鼠标移动等)与一些代码相结合的机制。具体来说,Java使用了一种称为“观察者设计模式”的方法来实现事件处理。在这种模式中,一个对象(称为“主题”)维护了一组观察者,这些观察者都希望跟踪主题的状态。当主题状态发生变化时,它将会通知所有的观察者,使得它们…

    Java 2023年5月27日
    00
  • java web项目Session获取不到问题及解决

    我们来详细讲解一下“Java Web项目Session获取不到问题及解决”的攻略。 问题的描述 在 Java Web 项目中,我们经常使用 Session 来进行用户状态的维护和管理。但有时我们会发现,无法获取到已经创建的 Session,这样就会导致用户登录等功能出现问题。 问题的原因 造成 Session 获取失败的原因有很多,具体包括以下几个方面: 代…

    Java 2023年6月15日
    00
  • java的Jackson将json字符串转换成泛型List

    转换JSON字符串成Java对象是Java程序中经常需要做的一个任务。有很多开源库能够帮助我们完成这一任务,如Jackson。Jackson 是一个高效的 JSON 处理器,能够将 JSON 字符串解析成 Java 对象。 Jackson 支持将 JSON 转换成 Java 对象,也支持将 JSON 转换成泛型 List,本篇攻略将介绍 Jackson 将 …

    Java 2023年5月26日
    00
  • @RequestBody时第二个字母大写,映射不到的解决

    使用Spring MVC时,通常可以使用@RequestBody注解来接收HTTP请求的JSON数据,并将请求体转换为Java对象。但在实际使用过程中,有时会遇到使用@RequestBody时第二个字母大写时,映射不到的问题。这是因为Spring MVC默认情况下使用的是Jackson库来进行JSON转换,而Jackson库的命名策略默认是采用小写字母和下划…

    Java 2023年5月26日
    00
  • Spring Boot整合Kafka教程详解

    下面我来为你详细讲解“Spring Boot整合Kafka教程详解”的完整攻略。 Spring Boot整合Kafka教程详解 什么是Kafka Kafka是一个由Apache软件基金会开发的开源,分布式的发布/订阅系统。它具有高吞吐量、强大的可扩展性和容错性,并且可以处理大量的实时数据。此外,Kafka还提供了多种客户端API,可以用来发送和接收消息。 S…

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