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
        
            contextConfigLocation
            classpath:springmvc.xml
        
        1
    
    
        DispatcherServlet
        /
    
 
    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-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整合shiro安全框架_第1张图片

SSM环境的搭建

shiro的整合

SSM整合shiro安全框架_第2张图片

(1)引入shiro依赖


    
      org.apache.shiro
      shiro-spring
      1.9.0
    

(2)修改spring配置文件

 
    
    
          
    
    
    
           
    

    
    
          
          
    

    
    
         
         
         
         

         
               
                    /login=anon
                    /**=authc
               
         
    

shiro中内置很多过滤器,而每个过滤都有相应的别名.

SSM整合shiro安全框架_第3张图片

(3) 修改web.xml文件

  
    
        shiroFilter
        org.springframework.web.filter.DelegatingFilterProxy
    
    
        shiroFilter
        /*
    

 1.1 进入主页后,不同的用户可以看到不同的内容。

SSM整合shiro安全框架_第4张图片

<%--
  Created by IntelliJ IDEA.
  User: YSH
  Date: 2022/8/5
  Time: 16:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>


    登录成功界面


    

欢迎来到主页

查询用户信息
删除用户信息
修改用户信息
增加用户信息
导出用户信息

SSM整合shiro安全框架_第5张图片

可以在jsp中获取当前登录者的账号  

欢迎来到主页

上面只是在网页中根据不同用户显示不同的菜单,这种方式只能防君子不能防小人。因为现在依旧可以通过postman访问没有的权限方法  比如张三可以访问到user:export路径

解决办法:

  1. 拦截器---获取请求路径 然后根据你的路径判断当前用户是否具有该权限。

 2  .spring整合shiro时提供了一个注解:可以加载相应方法上。

2.1

1.在springmvc中开启shiro注解


    
    
    
        
    
    


2.2在controller层使用shiro注解

 @RequiresPermissions(value = {"/user/query","/user/aaa"},logical= Logical.OR)

SSM整合shiro安全框架_第6张图片

SSM整合shiro安全框架_第7张图片

这个太丑了,我们想要跳转一个页面,

我们之前学过全局异常处理:    没有登录会报这个异常

SSM整合shiro安全框架_第8张图片

2.ssm整合shiro完成前后端分离

所谓前后端完全分离:后端响应的都是json数据,而不再是网页。

1. 登录成功或者失败应该返回json数据
2. 当未登录时返回的也是json数据
3. 访问未授权的资源,也要分会json。

2.1 登录成功或者失败应该返回json数据

修改登录接口

SSM整合shiro安全框架_第9张图片

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整合shiro安全框架_第10张图片

2.3 如果没有权限应该返回json数据

SSM整合shiro安全框架_第11张图片

你可能感兴趣的:(ssm整合,JAVA,spring,java,maven,ssm,shiro)