springSecurity【1】什么是springSecurity
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作 。
【2】springSecurity的特点
1、与Spring无缝整合
2、全面的权限控制
3、专门为web开发而设计
- 旧版本不能脱离Web环境使用
- 新版本对整个框架进行了分层抽取,分成了核心模块和Web模块 。单独引入核心模块就可以脱离Web环境
【3】springSecurity核心功能
- 认证
- 授权
- 攻击防护 (防止伪造身份)

文章插图
【4】springSecurity示例代码
坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>启动类上加注解@SpringBootApplication@EnableTransactionManagement@ServletComponentScan@EnableScheduling@EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true)//开启springSecurity支持public class TakeOutApplication {public static void main(String[] args) {SpringApplication.run(TakeOutApplication.class, args);}}给需要权限的接口添加注解@GetMapping("/page")@PreAuthorize("hasAuthority('user-find')")public Result<Page> page(int page, int pageSize, String name) {//控制层代码//......return null;}配置类/** * @version 1.0 * @Author Harris * @since 2022/8/18 */@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter {@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().authorizeRequests()//所有请求.antMatchers("/employee/**").authenticated()//所有/employee/**的请求必须认证通过.anyRequest().permitAll().and().exceptionHandling().accessDeniedHandler(new MyAccessFail()).authenticationEntryPoint((request, response, ex) -> {PrintWriter out = response.getWriter();out.println("NoLogin");//自定义未登录跳转(前后端分离)}).and().formLogin()//允许表单登录.loginProcessingUrl("/login").successForwardUrl("/employee/login-success");//自定义登录成功的页面地址}}认证接口/** * @version 1.0 * @Author Harris * @since 2022/8/26 */@Componentpublic class SpringDataUserDetailsService implements UserDetailsService {@Autowiredprivate EmployeeService employeeService;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {//1.根据页面提交的用户名username查询数据库User byName = employeeService.findByName(username);if (byName == null) {return null;}//获取权限List<String> permissions = employeeService.findPermissionsByUserId(String.valueOf(byName.getId()));String[] perarray = new String[permissions.size()];permissions.toArray(perarray);UserDetails userDetails = org.springframework.security.core.userdetails.User.withUsername(byName.getName()).password(byName.getPassword()).authorities(perarray).build();return userDetails;}}总结Shiro特点- 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
- 异构客户端会话访问;
- 非常简单的加密 API;
- 不跟任何的框架或者容器捆绑,可以独立运行 。
- 不能脱离Spring;
- spring-security对spring结合较好,项目是spring-boot等搭建的,使用起来更加方便;
- 有更好的spring社区进行支持;
- 支持oauth授权 。
- 认证功能
- 授权功能
- 加密功能
- 会话管理
- 缓存支持
- Spring Security是一个重量级的安全管理框架;Shiro则是一个轻量级的安全管理框架
- Spring Security 基于Spring开发,项目若使用Spring作为基础,配合Spring Security 做权限更便捷,而Shiro需要和Spring 进行整合开发;
推荐阅读
- 光猫与无线路由器的连接方式 猫接路由器
- 家长如何与初中生进行有效沟通 家长如何与初中生沟通
- 地下城与勇士|DNF:韩服110级军团版本职业榜!幻神女气功逆袭,超越奶妈成第三
- 秦昊|秦昊与美女饭局搞暧昧,两人双手紧握相聊甚欢,伊能静到场秒认怂
- 唐宁|唐宁:张国荣“妹妹”,与大13岁老公离婚后,竟落魄到去扫厕所?
- 如何教育青春期男孩,如何教育青春期男孩与女生的交往
- 水星|吴士宏:越过山丘,打破人生与事业的迷障
- 解决学生常见厌学心理的对策 青少年厌学心理问题与对策
- 从姓氏看文化渊源 姓氏源流与文化寻根
- 扈三娘与王矮虎?扈三娘和王英结婚是哪几
