Spring Boot学习篇(十一)
创始人
2024-05-13 22:44:54

Spring Boot学习篇(十一)

shiro安全框架使用篇(三)

1.shiro过滤地址配置(部分地址必须要登录才能访问)

1.1 在controll包下创建CRUDController类(用于提供地址进行测试),其内容如下所示

package com.zlz.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.servlet.http.HttpSession;//①shiro过滤页面配置步骤一
@Controller
@RequestMapping("product")
public class CRUDController {@RequestMapping("find")public String find(HttpSession session){session.setAttribute("result", "商品查询");return "index";}@RequestMapping("delete")public String delete(HttpSession session){session.setAttribute("result", "商品删除");return "index";}@RequestMapping("update")public String update(HttpSession session){session.setAttribute("result", "商品删修改");return "index";}@RequestMapping("insert")public String insert(HttpSession session){session.setAttribute("result", "商品插入");return "index";}
}

1.2 变更ShiroConfig代码中的factoryBean方法

1.2.1 需要添加的代码如下所示
Map map=new LinkedHashMap<>();
//配置规则 不拦截的(放行的)放上面,拦截的放在下面
//find地址表示不需要登录即可访问,注意这个map.put方法里面的第一个参数也可以是网页如/*.html这种
map.put("/product/find", "anon");
//表示除了find以外的地址,都需要登录才行,相当于先执行前面再去执行后面
map.put("/product/*", "user");
sffb.setFilterChainDefinitionMap(map);
1.2.2 factoryBean方法的完整代码配置如下所示
@Bean("shiroFilterFactoryBean")public ShiroFilterFactoryBean factoryBean(){ShiroFilterFactoryBean sffb=new ShiroFilterFactoryBean();//设置安全管理器sffb.setSecurityManager(securityManager());//*****设置没有登录时需要跳转的地址sffb.setLoginUrl("/sysUser/unlogin");//**********过滤器配置(过滤器的地址有很多需要配置,因此需要保证顺序)Map map=new LinkedHashMap<>();/*** 一个地址可以执行多个过滤器* 常用的几个过滤器*    annon 允许匿名访问(不需要登录)*    user 需要登录才能访问(包含记住我)*    authc 需要登录(强制登录,本次登录是输入密码进入的,不包含记住我)*    logout 注销*    roles 必须满足指定的所有角色*    perms 必须满足指定的所有权限*///*****规则 不拦截的(放行的)放上面,拦截的放在下面//find地址表示不需要登录即可访问map.put("/product/find", "anon");//表示除了find以外的地址,都需要登录才行,相当于先执行前面再去执行后面map.put("/product/*", "user");sffb.setFilterChainDefinitionMap(map);//检测到没有权限时的跳转地址
//        sffb.setUnauthorizedUrl("");return sffb;}

1.3 变更SysUserController类

1.3.1 把User对象信息存储到session域中(模拟已登录)
SysUser users = sysUserMapper.findUserByUsername(username);
session.setAttribute("users", users);
1.3.2 增加未登录时的控制器方法
//设置需要登录,但没有登录的方法@RequestMapping("unlogin")public String unlogin(RedirectAttributes ra){ra.addFlashAttribute("msg","请先登录");return "redirect:/sysUser/tologin";}
1.3.3 增加跳转到登录界面的方法
@RequestMapping("tologin")
public String tologin(){return "login";
}

1.3.4 完整的SysUserController类代码如下所示

package com.zlz.controller;import com.zlz.entity.SysUser;
import com.zlz.mapper.SysUserMapper;
import com.zlz.service.ISysUserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.servlet.http.HttpSession;
@Controller
@RequestMapping("/sysUser")
public class SysUserController {@AutowiredSysUserMapper sysUserMapper;@RequestMapping("login")public String login(String username, String password, RedirectAttributes ra, HttpSession session){//获取当前操作对象Subject subject = SecurityUtils.getSubject();//把用户名、密码存入token中UsernamePasswordToken token=new UsernamePasswordToken(username,password);try {subject.login(token);//*************查到对象后把它放在session里面SysUser users = sysUserMapper.findUserByUsername(username);session.setAttribute("users", users);return "index";} catch (UnknownAccountException e) {ra.addFlashAttribute("msg", "用户名错误");} catch (LockedAccountException e) {ra.addFlashAttribute("msg", "该用户被锁定,请联系管理员解锁");} catch (IncorrectCredentialsException e) {ra.addFlashAttribute("msg", "密码错误");}//重定向地址栏改变,但因为走的是视图解析器,那么他的地址栏是跟随视图解析器里面的地址栏变化的return "redirect:/";}//***************改动的地方@RequestMapping("tologin")public String tologin(){return "login";}//设置需要登录,但没有登录的方法@RequestMapping("unlogin")public String unlogin(RedirectAttributes ra){ra.addFlashAttribute("msg","请先登录");return "redirect:/sysUser/tologin";}}

1.4 resources\templates目录下的两个页面文件

1.4.1 测试页面 index.html


Title

这是主页!!!!

查询商品添加商品修改商品删除商品
1.4.2 没有用户权限时跳转的页面 login.html


Title

用户名:
密码:

1.5 在controller包下创建WelcomeController类,用于配置默认页面(localhost:8080时显示的页面)

package com.zlz.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;@Controller
public class WelcomeController {//默认访问localhost:8080进入的页面,一个斜杠代表进入你想要其进入的初始页面(默认页面的配置)@RequestMapping("/")public String welcome(){System.out.println("进入了没有");return "index";}
}

1.6 测试

1.6.1 查询页面
a 点击查询链接前

在这里插入图片描述

b 点击查询链接后

在这里插入图片描述

1.6.2 添加页面
a 点击添加链接前

在这里插入图片描述

b 点击添加链接后

在这里插入图片描述

1.6.3 修改页面
a 点击修改链接前

在这里插入图片描述

b 点击修改链接后

在这里插入图片描述

1.6.4 删除页面
a 点击删除链接前

在这里插入图片描述

b 点击删除链接后

在这里插入图片描述

相关内容

热门资讯

demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...