本文主要介绍SpringBoot+SpringSecurity的简单介绍1.SpringSecurity基本介绍SpringSecurity这里就不过多介绍了。详情请参考官方文档。简单说一下SpringSecurity的核心功能:认证(你是谁)授权(你能做什么)攻击防护(防止身份被伪造)2.基础环境搭建这里我们使用SpringBoot作为项目的基础框架,我这里使用maven的方式来进行包管理,所以这里是集成SpringSecurity的方式jeecg-boot-cloud-studycom.jeecg.cloud1.0.04.0.0jeecg-boot-securityorg.springframework.boot<艺术ifactId>spring-boot-starter-weborg.springframework.bootspring-boot-starter-security然后创建web层请求接口@RestController@RequestMapping("/user")publicclassUserController{@GetMappingpublicStringgetUsers(){return"HelloJeecgSpringSecurity";}}接下来就可以直接运行项目,执行调用界面看效果3.通过网页调用我们先通过浏览器调用界面,直接访问http://localhost:8080/user。如果界面可以正常访问,应该会显示“HelloJeecgSpringSecurity”。但是我们不能正常访问。出现下图中的认证输入框。这是因为在SpringBoot中,引入了SpringSecurity依赖,权限控制自动生效,此时的接口都被保护起来了。我们需要通过Validationisrequired才能正常访问。SpringSecurity提供了一个默认用户,用户名为user,密码在项目启动时自动生成。我们在查看项目启动日志时,会发现如下LogUsingdefaultsecuritypassword:62ccf9ca-9fbe-4993-8566-8468cc33c28c当然,你看到的密码肯定和我的不一样。我们直接使用用户名和启动日志密码登录,登录成功后跳转到正常调用接口的页面。如果不想一开始就开启SpringSecurity,可以在配置文件中这样配置:#securityenablesecurity.basic.enabled=false刚刚看到的登录框是SpringSecurity提供的,调用http基本登录。它表明这不是我们想要的产品。我们的前端一般都是通过表单提交来进行用户登录验证,所以我们需要自定义自己的验证逻辑。4.自定义用户认证逻辑每个系统都要有自己的用户系统,所以我们需要定制自己的认证逻辑和登录界面。这里需要先配置SpringSecuritypackageorg.jeecg.auth.config;importorg.springframework.context.annotation.Configuration;importorg.springframework.security.config.annotation.web.builders.HttpSecurity;importorg.springframework.security。config.annotation.web.configuration.WebSecurityConfigurerAdapter;@ConfigurationpublicclassSpringSecurityConfigextendsWebSecurityConfigurerAdapter{@Overrideprotectedvoidconfigure(HttpSecurityhttp)throwsException{http.formLogin()//定义要求用户登录时跳转到的登录页面。.loginProcessingUrl("/user/login")//自定义登录界面.and().authorizeRequests()//定义哪些url需要保护,哪些不需要保护。anyRequest()//任何请求,登录后可以访问.authenticated();}}自定义密码加解密包org.jeecg.auth.config;importorg.springframework.context.annotation.Bean;importorg.springframework.security.crypto.password.PasswordEncoder;importorg.springframework.刻板印象。Component;@ComponentpublicclassMyPasswordEncoderimplementsPasswordEncoder{@OverridepublicStringencode(CharSequencecharSequence){returncharSequence.toString();}@Overridepublicbooleanmatches(CharSequencecharSequence,Strings){returns.equals(charSequence.toString());}}接下来配置用户认证逻辑,因为我们有它自己的一套用户系统包org.jeecg.auth.config;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.security.core.authority。AuthorityUtils;importorg.springframework.security.core.userdetails.User;importorg.springframework.security.core.userdetails.UserDetails;importorg.springframework.security.core.userdetails.UserDetailsS??ervice;importorg.springframework.security.core.userdetails.UsernameNotFoundException;importorg.springframework.security.crypto.factory.PasswordEncoderFactories;importorg.Enspringframewordc.passrcode.securityimportorg.springframework.stereotype.password根据用户名,和权限//封装用户信息,返回参数为:用户名,密码,用户权限Useruser=newUser(username,passwordEncoder.encode("123456"),AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));returnuser;}}这里我们没有做过多的验证,用户名即可随意填写,但密码必须为“123456”,才能登录成功。同时可以看到这里User对象的第三个参数代表的是当前用户的权限,我们设置为“admin”。这里我们只是填了一个用户,然后填了一个错误的密码(不是123456)。这时候会提示验证错误:同时控制台也会打印登录时填写的user。现在让我们尝试使用正确的密码登录。可以发现会通过校验,跳转到正确的接口调用。向上翻页。6、UserDetails刚才我们写MyUserDetailsS??ervice的时候,里面实现了一个方法,返回了一个UserDetails。这个UserDetails是一个封装用户信息的对象,里面有七个方法publicinterfaceUserDetailsextendsSerializable{//封装权限信息CollectiongetAuthorities();//密码信息StringgetPassword();//登录用户名StringgetUsername();//账户是否过期booleanisAccountNonExpired();//账户是否冻结booleanisAccountNonLocked();//账户密码是否过期,一般一些对密码要求高的系统会用到,要求用户每隔一段时间重新设置密码booleanisCredentialsNonExpired();//账户是否可用booleanisEnabled();}当我们返回UserDetails实现类User时,我们可以通过User构造方法设置相应的参数七、密码加解密SpringSecurity有一个PasswordEncoderinterfacepublicinterfacePasswordEncoder{//加密密码Stringencode(CharSequencevar1);//判断匹配密码booleanmatches(CharSequencevar1,Stringvar2);}我们只需要自己实现这个接口,在配置文件中配置即可。