简介

狂神的Springboot课程中讲的SpringSecurity

源码地址

【狂神说Java】SpringBoot最新教程IDEA版通俗易懂

SpringSecurity环境搭建

实现界面的路由跳转

@Controller
public class RouterController { @RequestMapping({"/","index"})
public String index(){
return "index";
} @RequestMapping("toLogin")
public String toLogin(){
return "views/login";
} @RequestMapping("/level1/{id}")
public String level1(@PathVariable("id") int id){
return "views/level1/"+id;
} @RequestMapping("/level2/{id}")
public String level2(@PathVariable("id") int id){
return "views/level2/"+id;
} @RequestMapping("/level3/{id}")
public String level3(@PathVariable("id") int id){
return "views/level3/"+id;
}
}

效果

首页

点击Level-1

点击Level-2

用户认证和授权

授权

设置vip1角色可以访问level1,vip2角色可以访问level2,vip3角色可以访问level3

认证

设置kuangshen拥有vip2、vip3的权限

设置root拥有vip1、vip2、vip3的权限

设置guest拥有vip1的权限

// AOP: 拦截器
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 授权
@Override
protected void configure(HttpSecurity http) throws Exception {
// 首页所有人可以访问,功能页只有对应有权限的人才能访问
// 请求授权的规则
http.authorizeHttpRequests()
.antMatchers("/").permitAll()
.antMatchers("/level1/**").hasRole("vip1")
.antMatchers("/level2/**").hasRole("vip2")
.antMatchers("/level3/**").hasRole("vip3"); // 没有权限默认会到登录界面,需要开启登录的界面
http.formLogin();
} // 认证
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//这些数据正常应该从数据库中读
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
.withUser("kuangshen").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip3")
.and()
.withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
.and()
.withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
}
}

效果

首页都可以访问,再次点击level,跳出登录界面

登录不同的用户,实现之前设置的不同访问权限

注销及权限控制

注销

点击注销

回到首页

权限控制

登录不同权限的用户,看到的界面不一样。

登录root用户

登录kuangshen用户

登录guest用户

记住我及首页定制

使用定制首页代替默认的

点击记住我登录,会在cookie中保存remember-me的信息,保存14天。

参考资料

源码地址

【狂神说Java】SpringBoot最新教程IDEA版通俗易懂

最新文章

  1. 加载未安装APK中的类
  2. 虚拟机克隆以后出现“需要整合虚拟机磁盘”的解决方法
  3. linux下网络程序遭遇SIGPIPE的解决(转)
  4. 自定义ZXing二维码扫描界面并解决取景框拉伸等问题
  5. 查看Wii的系统版本信息
  6. MYSQL数据去重与外表填充
  7. Android API 中文(76)——AdapterView.OnItemLongClickListener
  8. java.text.NumberFormat使用方法
  9. mysql存储过程及经常使用函数
  10. 对sql进行分页处理(Oracle版)
  11. asp.net MVC Session锁的问题
  12. 基于UDP协议的socket通信
  13. JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别
  14. LR12脚本录制流程
  15. 15. 3Sum (JAVA)
  16. Shiro+Redis实现tomcat集群session共享
  17. MYSQL总览
  18. jQuery表格列宽可变,兼容firfox
  19. 20145320周岐浩 web安全基础实践
  20. Polygenic score

热门文章

  1. Codeforces Round #751 (Div. 2)/CodeForces1602
  2. 8.-Django应用及分布式路由
  3. 走进shell
  4. C# Interlocked 类
  5. Python标准库之 xml.etree.ElementTree
  6. Java继承Frame画一个窗口显示图片
  7. vue3中的defineProps,watch,computed
  8. JUnit 5 单元测试教程
  9. centos7 ftp服务搭建记录
  10. 网络编程:软件开发架构、架构总结、网络编程前戏、OSI七层协议简介、OSI七层协议之物理连接层、数据链路层、网络相关专业名词、OSI七层协议之网络层