国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SSM 整合 Shiro 安全框架【快速入門(mén)】

這篇具有很好參考價(jià)值的文章主要介紹了SSM 整合 Shiro 安全框架【快速入門(mén)】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、搭建ssm工程??

1.創(chuàng)建工程??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
更改web路徑
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
創(chuàng)建所需目錄
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

2.引入依賴??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>shiro</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>shrio-05</artifactId>
    <name>Archetype - shrio-05</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <!--mysql驅(qū)動(dòng)-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <!--spring的相關(guān)依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <!--mybatis的依賴-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>
        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.15.2</version>
        </dependency>

        <!--jsp servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!--druid依賴-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
    </dependencies>

</project>

3.spring配置文件??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--包掃描-->
    <context:component-scan base-package="com.lzq"/>
    <!--2.注解驅(qū)動(dòng)-->
    <mvc:annotation-driven/>
    <!--3.靜態(tài)資源放行-->
    <mvc:default-servlet-handler/>
    <!--4.視圖解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--數(shù)據(jù)源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db2?serverTimezone=Asia/Shanghai"/>
    </bean>

    <!--SqlSessionFactory 加載mybatis的配置-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--映射文件所在的路徑-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!--7.設(shè)置dao接口的代理實(shí)現(xiàn)類(lèi)-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
        <!--dao接口所在的包-->
        <property name="basePackage" value="com.lzq.dao"/>
    </bean>
    <!--事務(wù)管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--開(kāi)啟事務(wù)的注解驅(qū)動(dòng)-->
    <tx:annotation-driven/>

</beans>

4. web.xml??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <!--tomcat啟動(dòng)時(shí)加載該類(lèi)-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

5.創(chuàng)建實(shí)體類(lèi)??

屬性名與數(shù)據(jù)庫(kù)字段名一 一對(duì)應(yīng)
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

package com.lzq.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer userid;
    private String username;
    private String userpwd;
    private String sex;
    private String address;
    private String salt;

}

6.創(chuàng)建dao層和mapper層??

這里只是為了測(cè)試項(xiàng)目,還沒(méi)有進(jìn)行編碼工作

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

7.測(cè)試??

啟動(dòng)tamcat服務(wù)

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

二、 ssm整合shiro—認(rèn)證功能??

1.創(chuàng)建數(shù)據(jù)庫(kù)表??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for permission
-- ----------------------------
DROP TABLE IF EXISTS `permission`;
CREATE TABLE `permission`  (
  `perid` int(0) NOT NULL AUTO_INCREMENT,
  `pername` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  `percode` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`perid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of permission
-- ----------------------------
INSERT INTO `permission` VALUES (1, '查詢用戶信息', 'user:query');
INSERT INTO `permission` VALUES (2, '修改用戶', 'user:update');
INSERT INTO `permission` VALUES (3, '刪除用戶', 'user:delete');
INSERT INTO `permission` VALUES (4, '添加用戶', 'user:insert');
INSERT INTO `permission` VALUES (5, '導(dǎo)出用戶', 'user:export');

-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role`  (
  `roleid` int(0) NOT NULL AUTO_INCREMENT,
  `rolename` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`roleid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO `role` VALUES (1, '倉(cāng)管管理員');
INSERT INTO `role` VALUES (2, 'CEO');
INSERT INTO `role` VALUES (3, '保安');

-- ----------------------------
-- Table structure for role_permission
-- ----------------------------
DROP TABLE IF EXISTS `role_permission`;
CREATE TABLE `role_permission`  (
  `perid` int(0) NOT NULL,
  `roleid` int(0) NOT NULL,
  PRIMARY KEY (`perid`, `roleid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of role_permission
-- ----------------------------
INSERT INTO `role_permission` VALUES (1, 1);
INSERT INTO `role_permission` VALUES (1, 2);
INSERT INTO `role_permission` VALUES (1, 3);
INSERT INTO `role_permission` VALUES (2, 1);
INSERT INTO `role_permission` VALUES (2, 2);
INSERT INTO `role_permission` VALUES (3, 1);
INSERT INTO `role_permission` VALUES (3, 2);
INSERT INTO `role_permission` VALUES (4, 1);
INSERT INTO `role_permission` VALUES (5, 3);

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `userid` int(0) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  `userpwd` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  `sex` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  `salt` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`userid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'zhangsan', '4b05a8716a430f71c6911d2e9149092f', '男', '武漢', '07f63bbf285e4719bfee1cc2bb81db33');
INSERT INTO `user` VALUES (2, 'lisi', '99cc11855b41ff3e5f7c0af3c5090a8c', '女', '北京', '2d7e37f019144764ac02aa7220929f93');
INSERT INTO `user` VALUES (3, 'wangwu', '6d70c027801af4dc892ab340d4bf73b6', '女', '成都', '99f6bf1b540145699e6e5c90480105b0');

-- ----------------------------
-- Table structure for user_role
-- ----------------------------
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role`  (
  `userid` int(0) NOT NULL,
  `roleid` int(0) NOT NULL,
  PRIMARY KEY (`userid`, `roleid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user_role
-- ----------------------------
INSERT INTO `user_role` VALUES (1, 1);
INSERT INTO `user_role` VALUES (2, 2);
INSERT INTO `user_role` VALUES (3, 3);

SET FOREIGN_KEY_CHECKS = 1;

2.引入依賴??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>shiro</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <packaging>war</packaging>
    <artifactId>shrio-05</artifactId>
    <name>Archetype - shrio-05</name>
    <url>http://maven.apache.org</url>

    <dependencies>

        <!--shiro-spring整合的依賴-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.7.0</version>
        </dependency>

        <!--mysql驅(qū)動(dòng)-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <!--spring的相關(guān)依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <!--mybatis的依賴-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>
        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.15.2</version>
        </dependency>

        <!--jsp servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!--druid依賴-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
    </dependencies>

</project>

3.修改spring.xml 配置文件??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--包掃描-->
    <context:component-scan base-package="com.lzq"/>
    <!--2.注解驅(qū)動(dòng)-->
    <mvc:annotation-driven/>
    <!--3.靜態(tài)資源放行-->
    <mvc:default-servlet-handler/>
    <!--4.視圖解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--數(shù)據(jù)源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db2?serverTimezone=Asia/Shanghai"/>
    </bean>

    <!--SqlSessionFactory 加載mybatis的配置-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--映射文件所在的路徑-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!--7.設(shè)置dao接口的代理實(shí)現(xiàn)類(lèi)-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
        <!--dao接口所在的包-->
        <property name="basePackage" value="com.lzq.dao"/>
    </bean>
    <!--事務(wù)管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--開(kāi)啟事務(wù)的注解驅(qū)動(dòng)-->
    <tx:annotation-driven/>

    
    <!--shiro和spring整合的配置-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="myRealm"/>
    </bean>
    <bean id="myRealm" class="com.lzq.realm.MyRealm">
        <property name="credentialsMatcher" ref="credentialsMatcher"/>
    </bean>
    <!--加密器-->
    <bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
        <property name="hashAlgorithmName" value="MD5"/>
        <property name="hashIterations" value="1024"/>
    </bean>

    <!--shiro過(guò)濾器 id:必須和web.xml里面的過(guò)濾器配置的名稱(chēng)對(duì)應(yīng)-->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <!--未登錄時(shí)跳轉(zhuǎn)的路徑-->
        <property name="loginUrl" value="/login.jsp"/>
        <!--過(guò)濾規(guī)則-->
        <property name="filterChainDefinitions">
            <value>
                /login=anon
                /**=authc
            </value>
        </property>
    </bean>

</beans>

4.創(chuàng)建realm實(shí)體類(lèi)??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

package com.lzq.realm;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

public class MyRealm extends AuthorizingRealm {
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        return null;
    }

    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        return null;
    }
}

5.修改web.xml文件??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <!--tomcat啟動(dòng)時(shí)加載該類(lèi)-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--shiro的過(guò)濾器:必須和ShiroFilterFactoryBean的id一致-->
    <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

6.創(chuàng)建前端登錄頁(yè)面login.jsp??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<%--
  Created by IntelliJ IDEA.
  User: LIYANGCUNZHUANG
  Date: 2023/7/6
  Time: 16:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登錄頁(yè)面</title>
</head>
<body>
<form method="post" action="/lagin">
  賬號(hào):<input type="text" value="username"><br><br>
  密碼:<input type="text" value="password"><br><br>
  <input type="submit" value="登錄">
</form>

</body>
</html>

7.創(chuàng)建vo層實(shí)體類(lèi)??

LoginVo

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

package com.lzq.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class LoginVo {
    private String username;
    private String password;

}

8.dao層 和 service層編碼??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

package com.lzq.dao;

import com.lzq.pojo.User;

public interface UserDao2 {
    User aaa(String username);
}

package com.lzq.service.impl;

import com.lzq.dao.UserDao2;
import com.lzq.pojo.User;
import com.lzq.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao2 userDao;
    public User findAllByusername(String username) {
        User user = userDao.aaa(username);
        return user;
    }
}

9.controller層編碼??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

package com.lzq.controller;

import com.lzq.pojo.User;
import com.lzq.service.UserService;
import com.lzq.vo.LoginVo;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.Mapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class UserController {
    @PostMapping ("/login")
    public String login(LoginVo loginVo){
        Subject subject = SecurityUtils.getSubject();
        System.out.println(loginVo.getUsername());
        UsernamePasswordToken token = new UsernamePasswordToken(loginVo.getUsername(),loginVo.getPassword());
        try {
            subject.login(token);
            return "success";
        }catch (Exception e){
            System.out.println("登錄失敗");
            return "redirect:/login.jsp";
        }

    }
}

10.Realm層編碼??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

package com.lzq.realm;

import com.fasterxml.jackson.databind.deser.std.NumberDeserializers;
import com.lzq.pojo.User;
import com.lzq.service.UserService;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;

public class MyRealm extends AuthorizingRealm {
    @Autowired
    private UserService userService;

    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        return null;
    }

    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        //從shiro框架權(quán)限管理器中獲取用戶名
        String username = token.getPrincipal().toString();
        //根據(jù)傳入的用戶名到數(shù)據(jù)庫(kù)查找是否存在該用戶信息
        User user = userService.findAllByusername(username);
        if (user != null) {
            //獲取到鹽  因?yàn)閿?shù)據(jù)庫(kù)中存儲(chǔ)的密碼都是加密過(guò)的解碼需要鹽
            ByteSource source = ByteSource.Util.bytes(user.getSalt());
            //將賬戶、密碼、鹽、給realm起的別名 交給 shiro框架處理比對(duì)
            SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getUserpwd(), source, this.getName());
            return info;
        }
        return null;
    }
}

11.測(cè)試??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

三、ssm整合shiro—授權(quán)功能??

1.修改myRealm??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

package com.lzq.realm;

import com.fasterxml.jackson.databind.deser.std.NumberDeserializers;
import com.lzq.pojo.User;
import com.lzq.service.UserService;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

public class MyRealm extends AuthorizingRealm {
    @Autowired
    private UserService userService;

    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        //獲取當(dāng)前登錄者的賬號(hào)
        User user = (User) principals.getPrimaryPrincipal();
        //從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)
        List<String> permissions =  userService.selectPermissionByuserid(user.getUserid());
        if (permissions.size()!=0){
            SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
            info.addStringPermissions(permissions);
            return info;
        }
        return null;
    }

    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        //從shiro框架權(quán)限管理器中獲取用戶名
        String username = token.getPrincipal().toString();
        //根據(jù)傳入的用戶名到數(shù)據(jù)庫(kù)查找是否存在該用戶信息
        User user = userService.findAllByusername(username);
        if (user != null) {
            //獲取到鹽  因?yàn)閿?shù)據(jù)庫(kù)中存儲(chǔ)的密碼都是加密過(guò)的解碼需要鹽
            ByteSource source = ByteSource.Util.bytes(user.getSalt());
            //將賬戶、密碼、鹽、給realm起的別名 交給 shiro框架處理比對(duì)
            SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getUserpwd(), source, this.getName());
            return info;
        }
        return null;
    }
}

2.UserService??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

package com.lzq.service.impl;

import com.lzq.dao.UserDao2;
import com.lzq.pojo.Permission;
import com.lzq.pojo.User;
import com.lzq.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao2 userDao;
    public User findAllByusername(String username) {
        User user = userDao.aaa(username);
        return user;
    }

    public List<String> selectPermissionByuserid(Integer userid) {
        List<Permission> permissions = userDao.selectpermissionByUserid(userid);
        List<String> collect = permissions.stream().map(item -> item.getPercode()).collect(Collectors.toList());
        return collect;
    }
}

3.userDao和映射??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lzq.dao.UserDao2">


    <select id="aaa" resultType="com.lzq.pojo.User">
            select * from user where username=#{username}

    </select>
    <select id="selectpermissionByUserid" resultType="com.lzq.pojo.Permission">
        select p.* from user_role ur join role_permission rp on ur.roleId=rp.roleid
                                     join permission p on rp.perid=p.perid where ur.userid=#{userId}
    </select>
</mapper>

4.前端頁(yè)面??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全

<%--
  Created by IntelliJ IDEA.
  User: LIYANGCUNZHUANG
  Date: 2023/7/6
  Time: 13:49
  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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<shiro:hasPermission name="user:query"><a>查詢用戶</a></shiro:hasPermission>
<shiro:hasPermission name="user:update"><a>修改用戶</a></shiro:hasPermission>
<shiro:hasPermission name="user:delete"><a>刪除用戶</a></shiro:hasPermission>
<shiro:hasPermission name="user:insert"><a>添加用戶</a></shiro:hasPermission>
<shiro:hasPermission name="user:export"><a>導(dǎo)出用戶</a></shiro:hasPermission>


</body>
</html>

5.測(cè)試??

SSM 整合 Shiro 安全框架【快速入門(mén)】,安全
SSM 整合 Shiro 安全框架【快速入門(mén)】,安全文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-528428.html

到了這里,關(guān)于SSM 整合 Shiro 安全框架【快速入門(mén)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot+Shiro框架整合實(shí)現(xiàn)前后端分離的權(quán)限管理基礎(chǔ)Demo

    SpringBoot+Shiro框架整合實(shí)現(xiàn)前后端分離的權(quán)限管理基礎(chǔ)Demo

    記錄一下使用SpringBoot集成Shiro框架實(shí)現(xiàn)前后端分離Web項(xiàng)目的過(guò)程,后端使用SpringBoot整合Shiro,前端使用vue+elementUI,達(dá)到前后端使用token來(lái)進(jìn)行交互的應(yīng)用,這種方式通常叫做無(wú)狀態(tài),后端只需要使用Shiro框架根據(jù)前端傳來(lái)的token信息授權(quán)訪問(wèn)相應(yīng)資源。 案例源碼:SpringBoot+Sh

    2024年02月06日
    瀏覽(24)
  • Shiro框架:Shiro SecurityManager安全管理器解析

    Shiro框架:Shiro SecurityManager安全管理器解析

    目錄 1.?SecurityManager介紹 1.1?Authenticator 1.2?Authorizer 1.3?SessionManager 2. DefaultWebSecurityManager解析 2.1?Destroyable 2.2?CacheManagerAware 2.3?EventBusAware 2.4?CachingSecurityManager(聚合緩存管理和事件監(jiān)聽(tīng)管理功能) 2.5?RealmSecurityManager(聚合Realm管理功能) 2.6?AuthenticatingSecurityManager(聚合登

    2024年01月17日
    瀏覽(17)
  • 整合SSM框架 -- 簡(jiǎn)單基礎(chǔ)SSM項(xiàng)目

    整合SSM框架 -- 簡(jiǎn)單基礎(chǔ)SSM項(xiàng)目

    學(xué)完MyBatis、Spring、SpringMVC,做一個(gè)基于SSM框架的基礎(chǔ)項(xiàng)目–書(shū)籍管理系統(tǒng),要求可以實(shí)現(xiàn)數(shù)據(jù)的增刪改查,業(yè)務(wù)運(yùn)行邏輯明了,分層開(kāi)發(fā),用來(lái)鞏固學(xué)習(xí) 目標(biāo): 配置SSM框架 實(shí)現(xiàn)基礎(chǔ)的增刪改查功能 具備后續(xù)方便的拓展功能 界面設(shè)計(jì)整潔 最終效果: 全部書(shū)籍頁(yè)面 新增書(shū)籍

    2024年02月08日
    瀏覽(33)
  • shiro 安全(權(quán)限)框架

    shiro 安全(權(quán)限)框架

    1.1、概述 Apache Shiro 是一個(gè)功能強(qiáng)大且易于使用的 Java 安全(權(quán)限)框架。Shiro 可以完成:認(rèn)證、授權(quán)、加密、會(huì)話管理、與 Web 集成、緩存 等。借助 Shiro 您可以快速輕松地保護(hù)任何應(yīng)用程序——從最小的移動(dòng)應(yīng)用程序到最大的 Web 和企業(yè)應(yīng)用程序。 官網(wǎng):https://shiro.apache.org/

    2024年02月06日
    瀏覽(33)
  • Shiro安全框架簡(jiǎn)介

    Shiro安全框架簡(jiǎn)介

    1.1 什么是權(quán)限管理 基本上只要涉及到用戶參數(shù)的系統(tǒng)都要進(jìn)行權(quán)限管理,使用權(quán)限管理實(shí)現(xiàn)了對(duì)用戶訪問(wèn)系統(tǒng)的控制,不同的用戶訪問(wèn)不同的資源。按照安全規(guī)則或者安全策略控制用戶訪問(wèn)資源,而且只能訪問(wèn)被授權(quán)的資源 權(quán)限管理包括認(rèn)證和授權(quán)兩部分,當(dāng)用戶訪問(wèn)資源

    2023年04月20日
    瀏覽(24)
  • JAVA安全框架之shiro

    JAVA安全框架之shiro

    Apache Shiro 是一個(gè)功能強(qiáng)大且易于使用的 Java 安全(權(quán)限)框架 。Shiro 可以完 成: 認(rèn)證、授權(quán)、加密、會(huì)話管理、與 Web 集成、緩存 等。借助 Shiro 您可以快速輕松 地保護(hù)任何應(yīng)用程序——從最小的移動(dòng)應(yīng)用程序到最大的 Web 和企業(yè)應(yīng)用程序。 官網(wǎng) :https://shiro.apache.org/ ? ? s

    2024年02月15日
    瀏覽(59)
  • SSM框架整合詳細(xì)教程

    SSM框架整合詳細(xì)教程

    目錄 1. 什么是SSM ? 2. SSM整合的時(shí)候容器之間如何訪問(wèn) 3. SSM下面的開(kāi)發(fā)步驟 4. SSM整合時(shí)候時(shí)容易混亂的知識(shí)點(diǎn) SSM是對(duì)三個(gè)框架名字的簡(jiǎn)寫(xiě),其中第一個(gè)S指的是SpringMVC,第二個(gè)S指的是Spring,第三個(gè)M指的是Mybatis。下面用一個(gè)簡(jiǎn)單的圖展示一下: 答案:在進(jìn)行SSM整合的時(shí)候,會(huì)

    2024年02月03日
    瀏覽(18)
  • 安全(權(quán)限)框架Shiro概述及原理

    安全(權(quán)限)框架Shiro概述及原理

    Apache Shiro 是一個(gè)功能強(qiáng)大且易于使用的 Java 安全(權(quán)限)框架。 Shiro 可以完成:認(rèn)證、授權(quán)、加密、會(huì)話管理、與 Web 集成、緩存 等。借助 Shiro 您可以快速輕松地保護(hù)任何應(yīng)用程序——從最小的移動(dòng)應(yīng)用程序到最大的 Web 和企業(yè)應(yīng)用程序。 官網(wǎng):https://shiro.apache.org/ 自 200

    2024年02月12日
    瀏覽(21)
  • 請(qǐng)簡(jiǎn)單介紹一下Shiro框架是什么?Shiro在Java安全領(lǐng)域的主要作用是什么?Shiro主要提供了哪些安全功能?

    請(qǐng)簡(jiǎn)單介紹一下Shiro框架是什么? Shiro框架是一個(gè)強(qiáng)大且靈活的開(kāi)源安全框架,為Java應(yīng)用程序提供了全面的安全解決方案。它主要用于身份驗(yàn)證、授權(quán)、加密和會(huì)話管理等功能,可以輕松地集成到任何Java Web應(yīng)用程序中,并提供了易于理解和使用的API,使開(kāi)發(fā)人員能夠快速實(shí)

    2024年04月11日
    瀏覽(25)
  • 請(qǐng)簡(jiǎn)單介紹一下Shiro框架是什么?Shiro在Java安全領(lǐng)域的主要作用是什么?Shiro主要提供了哪些安全功能

    請(qǐng)簡(jiǎn)單介紹一下Shiro框架是什么?Shiro在Java安全領(lǐng)域的主要作用是什么?Shiro主要提供了哪些安全功能

    會(huì)話管理(Session Management):Shiro能夠管理用戶的會(huì)話狀態(tài),包括會(huì)話的創(chuàng)建、維護(hù)和銷(xiāo)毀。它支持多種會(huì)話存儲(chǔ)方式(如內(nèi)存、數(shù)據(jù)庫(kù)等),并提供了會(huì)話超時(shí)、會(huì)話失效等機(jī)制,以確保會(huì)話的安全性。 跨平臺(tái)集成:Shiro不僅適用于Web應(yīng)用程序,還可以輕松集成到桌面應(yīng)用

    2024年04月13日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包