Springboot整合shiro_springboot shiro(1),2024最新网易网络安全面试题目

mybatis-plus-boot-starter
3.5.3.1

com.github.theborakompanioni thymeleaf-extras-shiro 2.0.0 org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok

2、自定义Shiro过滤器

public class AccountRealm extends AuthorizingRealm {
@Autowired
private AccountService accountService;

/**

  • 授权
  • @param principalCollection
  • @return
    */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    //获取当前登录的用户信息
    Subject subject = SecurityUtils.getSubject();
    Account account = (Account) subject.getPrincipal();

//设置角色
Set roles = new HashSet<>();
roles.add(account.getRole());
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);

//设置权限
info.addStringPermission(account.getPerms());
return info;
}

/**

  • 认证
  • @param authenticationToken
  • @return
  • @throws AuthenticationException
    /
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; //这行代码将传入的 authenticationToken 转换为 UsernamePasswordToken 对象,以便获取用户名和密码。
    Account account = accountService.findByUsername(token.getUsername());
    if(account != null){
    /
    *
  • 这是返回身份验证信息的代码。SimpleAuthenticationInfo 是 Shiro 框架中的一个实现类,用于封装用户的身份验证信息
  • @Param1 account 参数表示身份验证的主体对象,可以是任何表示用户身份的实体对象
  • @Param2 表示用户的密码,用于进行密码验证
  • @Param3 返回当前 Realm 的名称,用于标识身份验证信息来源,Realm 可以通过其名称进行唯一标识,以便在 Shiro 配置文件中区分和配置不同的 Realm
    */
    return new SimpleAuthenticationInfo(account,account.getPassword(),getName());
    }
    return null;
    }
    }

3、配置类

@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager){
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
factoryBean.setSecurityManager(securityManager);
//权限设置
Map<String,String> map = new HashMap<>();
map.put(“/main”,“authc”);
map.put(“/manage”,“perms[manage]”);
map.put(“/administrator”,“roles[administrator]”);
//设置登录页面
factoryBean.setLoginUrl(“/login”);
//设置未授权页面
factoryBean.setUnauthorizedUrl(“/unauth”);
factoryBean.setFilterChainDefinitionMap(map);
return factoryBean;
}

@Bean
public DefaultWebSecurityManager securityManager(AccountRealm accountRealm){
DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
manager.setRealm(accountRealm);
return manager;
}

@Bean
public AccountRealm accountRealm(){
return new AccountRealm();
}

5、认证和授权规则

认证过滤器

  1. anon:无需认证。
  2. authc:必须认证。
  3. authcBasic:需要通过HTTPBasic认证。
  4. user:不一定通过认证,只要曾经被Shiro记录即可,比如:记住我。

授权过滤器

  1. perms:必须拥有某个权限才能访问。
  2. role:必须拥有某个角色才能访问。
  3. port:请求的端口必须是指定值才可以。
  4. rest:请求必须基于RESTful,POST,PUT,GET,DELETE。
  5. ssl:必须是安全的URL请求,协议HTTP。

6、Shiro整合Thymeleaf

1、pom.xml引入依赖

com.github.theborakompanioni thymeleaf-extras-shiro 2.0.0

2、配置类添加ShiroDialect

@Bean
public ShiroDialect shiroDialect(){
return new ShiroDialect();
}

3、 配置视图解析器

spring:
thymeleaf:
prefix: classpath:/templates/
suffix: .html

4、 html

xmlns:th=“http://www.thymeleaf.org”        //加上这个才可以使用thymeleaf语法

xmlns:shiro=“http://www.thymeleaf.org/thymeleaf-extras-shiro”        //加上这个就可以使用shiro表达式了

    //加入这个可以解决控制台报错icon的问题 

7、Controller示例

@Controller
public class AccountController {

@GetMapping(“/{url}”)
public String redirect(@PathVariable(“url”) String url){
return url;
}

@PostMapping(“/login”)
public String login(String username, String password,Model model){
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
// token.setRememberMe(rememberMe);
try {
subject.login(token);
Account account = (Account) subject.getPrincipal();
subject.getSession().setAttribute(“account”,account);
return “index”;
} catch (UnknownAccountException e) {
e.printStackTrace();
model.addAttribute(“msg”,“用户名错误!”);
return “login”;
} catch (IncorrectCredentialsException e) {
e.printStackTrace();
model.addAttribute(“msg”,“密码错误!”);
return “login”;
}
}

@GetMapping(“/unauth”)
@ResponseBody
public String unauth(){
return “未授权,无法访问!”;
}

@GetMapping(“/logout”)
public String logout(){
Subject subject = SecurityUtils.getSubject();
subject.logout();
return “login”;
}
}

8、权限管理标准5张表

这个去网上随便搜下,就可以看到一些案例表!

9、密码加密、加盐

1、什么是加盐?

加盐的意思就是加上 安全随机数

2、ShiroConfig

@Bean
public AccountRealm accountRealm(){
AccountRealm accountRealm = new AccountRealm();
//设置加密算法
HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher(“md5”);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

850783)]
[外链图片转存中…(img-v0auICNg-1712547850783)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
[外链图片转存中…(img-Uc5hSABr-1712547850783)]

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值