首页 > 其他分享 >使用Spring Security实现安全认证

使用Spring Security实现安全认证

时间:2024-07-15 09:54:20浏览次数:12  
标签:Spring springframework 认证 import org Security security

使用Spring Security实现安全认证

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在这篇文章中,我将详细介绍如何使用Spring Security实现安全认证。通过丰富的代码示例,帮助大家全面掌握Spring Security的核心功能和配置方法。

1. Spring Security概述

Spring Security是一个功能强大且高度可定制的认证和访问控制框架。它是保护基于Spring应用程序的首选方案。Spring Security提供了全面的安全服务,包括用户认证、授权、常见攻击防护等。

2. 引入Spring Security依赖

首先,在项目的pom.xml文件中引入Spring Security的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

3. 创建用户服务

为了进行用户认证,我们需要创建一个自定义的用户服务实现UserDetailsService接口。这个服务将负责从数据源(例如数据库)加载用户信息。

package cn.juwatech.security.service;

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

import java.util.Collections;

@Service
public class CustomUserDetailsService implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 在实际应用中,这里应该从数据库加载用户信息
        if ("admin".equals(username)) {
            return new User("admin", "{noop}password", Collections.emptyList());
        } else {
            throw new UsernameNotFoundException("User not found");
        }
    }
}

在这个示例中,我们创建了一个名为admin的用户,密码为password。实际应用中,密码应该经过加密处理。

4. 配置Spring Security

接下来,我们需要创建一个安全配置类,继承WebSecurityConfigurerAdapter,并在其中配置安全策略。

package cn.juwatech.security.config;

import cn.juwatech.security.service.CustomUserDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomUserDetailsService userDetailsService;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login").permitAll() // 登录页面允许所有人访问
                .anyRequest().authenticated() // 其他请求需要认证
                .and()
            .formLogin()
                .loginPage("/login") // 自定义登录页面
                .defaultSuccessUrl("/") // 登录成功后重定向到首页
                .and()
            .logout()
                .permitAll(); // 注销功能允许所有人访问
    }
}

5. 创建自定义登录页面

为了提供用户友好的登录界面,我们需要创建一个自定义的登录页面。假设我们使用的是Thymeleaf模板引擎:

<!-- src/main/resources/templates/login.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form th:action="@{/login}" method="post">
        <div>
            <label>Username:</label>
            <input type="text" name="username"/>
        </div>
        <div>
            <label>Password:</label>
            <input type="password" name="password"/>
        </div>
        <div>
            <button type="submit">Login</button>
        </div>
    </form>
</body>
</html>

6. 创建控制器

我们需要创建一个控制器来处理登录请求以及登录成功后的重定向。

package cn.juwatech.security.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class LoginController {

    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @GetMapping("/")
    public String home() {
        return "home";
    }
}

在这个示例中,/login映射到自定义的登录页面,/映射到首页。

7. 启动应用

现在我们已经完成了所有配置,可以启动应用进行测试。在浏览器中访问http://localhost:8080/login,输入用户名admin和密码password进行登录。

总结

通过以上内容,我们详细介绍了如何使用Spring Security实现安全认证,包括引入依赖、创建用户服务、配置安全策略、自定义登录页面以及创建控制器。希望通过这些示例代码,大家能够更好地理解和应用Spring Security。

著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

标签:Spring,springframework,认证,import,org,Security,security
From: https://www.cnblogs.com/szk123456/p/18302518

相关文章

  • Spring框架--个人笔记
    1.什么是spring框架1.spring是一款开源框架,解决企业开发的复杂性。2.spring框架提供了三大核心思想:IOC、AOP、DIIOC:控制反转。创建对象并管理生命周期。AOP:面向切面编程。不改变源码对代码进行扩展。DI:依赖注入。3.spring框架特点:1.方便解耦,简化开发。2.AOP编程的支持-......
  • Spring Boot集成grpc快速入门demo
    1.什么是GRPC?gRPC 是一个高性能、开源、通用的RPC框架,由Google推出,基于HTTP2协议标准设计开发,默认采用ProtocolBuffers数据序列化协议,支持多种开发语言。gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。在gRPC客户端可以直接调用不同......
  • SpringBoot+dynamic+druid的多数据源配置
    一、模块环境SpringBoot版本:2.7.12MySQL版本:8.0.33Druid版本:1.2.23Dynamic版本:3.6.1二、数据源配置文件spring:autoconfigure:#排除Druid自动配置exclude:com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfiguredatasource:......
  • 基于java+springboot+vue实现的健身房管理系统(文末源码+Lw)113
     基于SpringBoot+Vue的实现的健身房管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:本健身房管理系统管理员,会员,员工。管理员功能有个人中心,会员管理,员工管理,会员卡管理,会员卡类型管理,教练信息管理,解聘管理,健身项目管理,指导项目管理,健身器材管......
  • 基于java+springboot+vue实现的在线教育系统(文末源码+Lw)111
     基于SpringBoot+Vue的实现的在线教育系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:本在线教育系统管理员功能有个人中心,用户管理,讲师管理,普通管理员管理,课程管理员管理,课程管理,课程分类管理,教师管理,名师管理,系统管理,订单管理。普通管理员和课......
  • Spring源码分析
    01、Spring源码分析:initPropertySources方法扩展点Spring的强大之处不仅仅在于它为Java开发者提供了极大便利,更在于它的开放式架构,使得用户可以拥有最大扩展Spring的能力。protectedvoidinitPropertySources(){ //Forsubclasses:donothingbydefault. }在A......
  • Spring源码分析
    01、Spring源码分析:initPropertySources方法扩展点Spring的强大之处不仅仅在于它为Java开发者提供了极大便利,更在于它的开放式架构,使得用户可以拥有最大扩展Spring的能力。protectedvoidinitPropertySources(){ //Forsubclasses:donothingbydefault. }在Abstrac......
  • 基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)
    基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)物品租赁系统是电子、信息技术相结合,是一种必然的发展趋势。以互联网为基础,以服务于广大用户为目的,发展整体优势,扩大规模,提升服务质量,提高物品租赁的......
  • 基于微信小程序+SpringBoot的化妆品选购推荐商城系统设计与实现
    ......
  • JVM:SpringBoot TomcatEmbeddedWebappClassLoader
    文章目录一、介绍二、SpringBoot中TomcatEmbeddedWebappClassLoader与LaunchedURLClassLoader的关系一、介绍TomcatEmbeddedWebappClassLoader是SpringBoot在其内嵌Tomcat容器中使用的一个类加载器(ClassLoader)。在SpringBoot应用中,当你选择将应用打包成可执......