【security】java springboot项目中使用springSecurity安全框架

这篇具有很好参考价值的文章主要介绍了【security】java springboot项目中使用springSecurity安全框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一步,创建springboot的web项目,并导入springSecurity的pom依赖

<!-- spring-security 安全框架依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<!-- spring-boot的web依赖(如果创建项目时没有勾选,可以手动加上) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

springboot项目如果导入security依赖后会自动托管整个项目,前端在访问项目的任何路径时会被拦截并跳转到security默认的登录页面,登录用户名为user,密码为控制台启动项目时生成的随机密码

第二步 自定义设置用户的认证和请求权限设置

一、自定义设置用户的认证:创建一个配置类(类上加@Configuration),让该类继承WebSecurityConfigurerAdapter类,并添加@EnableGlobalMethodSecurity( prePostEnabled = true)注解启动权限管理功能,重写configure(AuthenticationManagerBuilder auth)方法实现用户登录认证

1.设置固定配置登录的用户(不常用)

@Configuration
//启动 权限管理功能
@EnableGlobalMethodSecurity( prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // 重写配置权限的方法
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 固定配置登录的用户
        auth.inMemoryAuthentication() // 内存验证
                .withUser("tom")      //登录的用户名
                .password("{bcrypt}$2a$10$Wg.X1U3cKklWFqiZVmIzSeDynq3LcgXRlVhBIAW0s0tmZLRd.5QWy") 登录的mm
                .authorities("abc")   // 设置权限字符
		        .and()
		        .withUser("tom2")      //第二个用户,以此类推,.and()后可继续添加用户
		        .password("{bcrypt}$2a$10$Wg.X1U3cKklWFqiZVmIzSeDynq3LcgXRlVhBIAW0s0tmZLRd.5QWy") //登录的密码
		        .authorities("abc");  // 设置权限字符
    }
}

2.从数据库查询认证,创建一个实现类,通过实现userDetailsService接口,重写里面的loadUserByUsername(String s)方法,当用户点击登录时,此方法的参数会将当前的用户名传入,我们可通过用户名从数据库查询用户信息,将查到的用户信息保存到UserDetails对象中并返回,security框架会将返回的UserDetails对象和当前登录的用户进行认证,如果相同则登录成功。(注意密码必须是带加密的),最后在配置类里设置通过userDetailsServiceI对象验证文章来源地址https://www.toymoban.com/news/detail-557981.html

package com.security.springSecurity.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;

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        // 通过用户名去数据库查询密码及权限
        String username = s;
        String password = "{bcrypt}$2a$10$Wg.X1U3cKklWFqiZVmIzSeDynq3LcgXRlVhBIAW0s0tmZLRd.5QWy";//123456
        String authorities = "abc";

        // 将查询到的用户名、密码、权限保存到UserDetails中,框架会自动验证,如果前端传入的和UserDetails中保存一样则会登录成功
        UserDetails userDetails = User
                .builder()
                .username(username)
                .password(password)
                .authorities(authorities)
                .build();
        return userDetails;
    }
}
@Configuration
//启动 权限管理功能
@EnableGlobalMethodSecurity( prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsServiceImpl;
    // 重写配置权限的方法
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        // 通过userDetailsServiceImpl对象验证
        auth.userDetailsService(userDetailsServiceImpl);
    }

二、自定义设置请求权限:在配置类里继续重写configure(HttpSecurity http){}方法实现设置请求权限

package com.security.springSecurity.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;

@Configuration
//启动 权限管理功能
@EnableGlobalMethodSecurity( prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()        // 对请求进行权限设置
        .antMatchers(                   // 设置匹配路径
                "/index.html",
                "/css/*",
                "/js/*",
                "/login.html",
                "/login"
        ).permitAll()                   // 对以上匹配路径全部放行
        .anyRequest().authenticated()   // 对其他请求需要认证
        .and().formLogin()              // 没有权限会自动跳到登录页
        .loginPage("/login.html")       // 使用自己的登录页面
        .loginProcessingUrl("/login")   // 设置登录时表单提交的路径
        .failureUrl("/login.html?error")// 登录失败的路径
        .defaultSuccessUrl("/index.html")// 设置登录成功的页面
        ;
        http.logout()                   // 设置登出
            .logoutUrl("/logout")       // 设置登出的请求路径
            .logoutSuccessUrl("/login.html");//登出成功后返回的页面

        http.csrf().disable();          //关闭防跨越攻击,最好写上不然容易报错
    }
}

三、使用@PreAuthorize注解给Controller中的请求接口设置访问权限字符:设置后当前用户有该权限字符才能访问该路径,不然会报403权限不足。

四、在任何方法的参数上获取当前登录的用户:通过UserDetails中保存的当前登录用户获取

package com.security.springSecurity.controller;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    //3.在请求路径的方法上加@PreAuthorize("hasAuthority('权限字符')")即可
    @RequestMapping("/s1")
    @PreAuthorize("hasAuthority('abc')")
    public String test01(){
        return "s1";
    }

    //4.在任何方法的参数上加UserDetails参数,并在参数前加@AuthenticationPrincipal注解
    //  此时在使用UserDetails参数就是当前登录时存入的用户
    @RequestMapping("/my")
    public String getMy(@AuthenticationPrincipal UserDetails userDetails){
        String username = userDetails.getUsername();
        return "当前用户用名是:"+username;
    }
}

到了这里,关于【security】java springboot项目中使用springSecurity安全框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Security】让你的项目更加安全的框架

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Spring Security》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的加入,一

    2024年02月04日
    浏览(58)
  • java【毕业设计】项目-第118期基于SpringBoot+LayUI的视频播放网站(权限采用SpringSecurity)-计算机毕业设计

    java【毕业设计】项目-第118期基于SpringBoot+LayUI的视频播放网站(权限采用SpringSecurity) 【源码请到资源专栏下载】 Hi,大家好,今天分享的源码是《基于SpringBoot+LayUI的视频播放网站》。 支持本地资源视频文件上传在线播放,同时支持在线资源链接上传(ed2k、迅雷、等资源)下

    2023年04月10日
    浏览(48)
  • SpringSecurity 安全框架详解

    先赘述一下身份认证和用户授权: 用户认证( Authentication ):系统通过校验用户提供的用户名和密码来验证该用户是否为系统中的合法主体,即是否可以访问该系统; 用户授权( Authorization ):系统为用户分配不同的角色,以获取对应的权限,即验证该用户是否有权限执行

    2024年02月02日
    浏览(42)
  • SpringSecurity安全框架简介

    Spring Security是Spring全家桶的成员,官方对它的介绍是: 从介绍里可以看出,Spring Security是一个可定制扩展的框架,它主要提供了身份验证和访问控制功能。而这两个功能也是基于框架的扩展机制开发的,下面让我们一起了解一下Spring Security的基本概念和扩展机制的实现原理。

    2024年02月08日
    浏览(42)
  • SpringSecurity安全框架

    我们使用这个springSecurity安全框架,作用是认证,授权,将 用户的权限和对应的资源进行绑定 , 默认的是在内存中保存的,实际开发中,是需要根据项目业务的需求 对某些方法进行重写, 使数据库中权限对应的资源进行绑定, 就是查看当前登录的用户所扮演的角色,该角色有哪些权限

    2024年02月22日
    浏览(34)
  • SpringSecurity安全框架 ——认证与授权

    目录  一、简介 1.1 什么是Spring Security 1.2 工作原理 1.3 为什么选择Spring Security 1.4 HttpSecurity 介绍🌟 二、用户认证 2.1 导入依赖与配置 2.2 用户对象UserDetails 2.3 业务对象UserDetailsService 2.4 SecurityConfig配置 2.4.1 BCryptPasswordEncoder密码编码器 2.4.2 RememberMe 记住登录信息 2.4.3 CSR

    2024年02月04日
    浏览(44)
  • SpringSecurity分布式安全框架

    Spring Security是一个基于Spring框架的安全框架,它提供了全面的安全解决方案,包括用户认证和用户授权等Web应用安全性问题。Spring Security可以轻松扩展以满足自定义需求,它的真正强大之处在于它可以轻松扩展以满足自定义要求。 对于分布式系统来说,Spring Security可以结合

    2024年02月08日
    浏览(49)
  • SpringSecurity安全框架学习——@PreAuthorize的实现原理

    首先我们打开@PreAuthorize注解的源码,然后按住Ctrl并单击PreAuthorize,可以看到在EnableMethodSecurity注解中有引用 (本文使用IDEA,后续不再复述) 查看EnableMethodSecurity源码,可以到,其引用了MethodSecuritySelector 按照惯例,打开MethodSecuritySelector 可以看到,当prePostEnabled=true时,会注

    2023年04月16日
    浏览(39)
  • 【Java-框架-SpringSecurity】随笔

    项目文件; 【1】 【2】 【3】 【4】 【5】 【6】 【7】

    2024年01月18日
    浏览(43)
  • SpringBoot——Spring Security 框架

    优质博文:IT-BLOG-CN Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了 Spring IoC , DI (控制反转 Inversion of Control , DI : Dependency Injection 依赖注入)和 AOP (面

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包