ssm整合|SSM整合shiro安全框架

1.整合准备 企业中老项目还在使用ssm框架。
(1)创建一个maven的web工程。
(2)ssm整合到web工程----省略

spring配置文件
/login=anon /**=authc

web.xml配置文件
shiroFilter org.springframework.web.filter.DelegatingFilterProxy shiroFilter /* DispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocationclasspath:springmvc.xml 1DispatcherServlet / encodingFilter org.springframework.web.filter.CharacterEncodingFilter encodingutf-8 encodingFilter /*

pom依赖
org.springframework spring-webmvc 5.2.15.RELEASE org.mybatis mybatis 3.5.6 org.mybatis mybatis-spring 2.0.6 mysql mysql-connector-java 8.0.28 com.alibaba druid 1.2.1 org.projectlombok lombok 1.18.24 com.fasterxml.jackson.core jackson-databind 2.13.2.2 javax.servlet javax.servlet-api 4.0.1 org.springframework spring-jdbc 5.2.15.RELEASE org.springframework spring-tx 5.2.15.RELEASE org.springframework spring-aspects 5.2.15.RELEASE org.mybatis.generator mybatis-generator-core 1.4.0 com.github.pagehelper pagehelper 5.3.0 log4j log4j 1.2.17

数据库数据结构:
张三 -user:query user:add user:update user:delete
李四 ---》user:query user:add user:update王五-----》user:query user:export
数据库:
ssm整合|SSM整合shiro安全框架
文章图片

SSM环境的搭建 shiro的整合
ssm整合|SSM整合shiro安全框架
文章图片

(1)引入shiro依赖
org.apache.shiro shiro-spring 1.9.0

(2)修改spring配置文件
/login=anon /**=authc

shiro中内置很多过滤器,而每个过滤都有相应的别名.
ssm整合|SSM整合shiro安全框架
文章图片

(3) 修改web.xml文件
shiroFilter org.springframework.web.filter.DelegatingFilterProxy shiroFilter /*

1.1 进入主页后,不同的用户可以看到不同的内容。 ssm整合|SSM整合shiro安全框架
文章图片

登录成功界面 欢迎来到主页查询用户信息
删除用户信息
修改用户信息
增加用户信息
导出用户信息

ssm整合|SSM整合shiro安全框架
文章图片

可以在jsp中获取当前登录者的账号
欢迎来到主页

上面只是在网页中根据不同用户显示不同的菜单,这种方式只能防君子不能防小人。因为现在依旧可以通过postman访问没有的权限方法比如张三可以访问到user:export路径
解决办法:
  1. 拦截器---获取请求路径 然后根据你的路径判断当前用户是否具有该权限。
2.spring整合shiro时提供了一个注解:可以加载相应方法上。
2.1
1.在springmvc中开启shiro注解

2.2在controller层使用shiro注解
@RequiresPermissions(value = https://www.it610.com/article/{"/user/query","/user/aaa"},logical= Logical.OR)

ssm整合|SSM整合shiro安全框架
文章图片


ssm整合|SSM整合shiro安全框架
文章图片

这个太丑了,我们想要跳转一个页面,
我们之前学过全局异常处理:没有登录会报这个异常
ssm整合|SSM整合shiro安全框架
文章图片

2.ssm整合shiro完成前后端分离 所谓前后端完全分离:后端响应的都是json数据,而不再是网页。
1. 登录成功或者失败应该返回json数据
2. 当未登录时返回的也是json数据
3. 访问未授权的资源,也要分会json。
2.1 登录成功或者失败应该返回json数据 修改登录接口
ssm整合|SSM整合shiro安全框架
文章图片


2.2 当未登录时返回的也是json数据 创建一个过滤器,继承登录校验的某个接口。
package com.qy151.filter; import com.fasterxml.jackson.databind.ObjectMapper; import com.qy151.until.CommonResult; import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.PrintWriter; /** * @BelongsProject: 0804-ssm-shiro * @BelongsPackage: com.qy151.filter * @unthor : YSH * @date : 2022/8/5 17:46 * @Description: TODO */ public class LoginFilter extends FormAuthenticationFilter { //当没有登录时会经过该方法。如果想让他返回json数据那么必须重写方法 @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { response.setContentType("application/json; charset=utf-8"); PrintWriter writer = response.getWriter(); //未登录时的状态信息 CommonResult commonResult = new CommonResult(4001, "未登录,请先登录", null); //把java对象转换为json数据 ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(commonResult); writer.print(json); //响应给客户json数据writer.flush(); writer.close(); return false; } }

(2)注册我们的过滤器
ssm整合|SSM整合shiro安全框架
文章图片

2.3 如果没有权限应该返回json数据 【ssm整合|SSM整合shiro安全框架】ssm整合|SSM整合shiro安全框架
文章图片

    推荐阅读