日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Shiro与Springboot整合:配置依赖改造登录方法

發布時間:2024/4/13 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shiro与Springboot整合:配置依赖改造登录方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.learn</groupId><artifactId>shiro_springboot</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><relativePath/></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><fastjson.version>1.2.47</fastjson.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.16</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--shiro與spring整合 --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.3.2</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.3.2</version></dependency><!--shiro與redis整合實現sessionDao --><dependency><groupId>org.crazycake</groupId><artifactId>shiro-redis</artifactId><version>3.0.0</version></dependency></dependencies><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></pluginRepository><pluginRepository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories><build><plugins><!--編譯插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><!--單元測試插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.12.4</version><configuration><skipTests>true</skipTests></configuration></plugin></plugins></build> </project> package cn.learn.shiro.controller;import cn.learn.shiro.domain.User; import cn.learn.shiro.service.UserService; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresRoles; import org.apache.shiro.crypto.hash.Md5Hash; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession; import java.util.Enumeration;@RestController public class UserController {@Autowiredprivate UserService userService;//個人主頁//使用shiro注解鑒權//@RequiresPermissions() -- 訪問此方法必須具備的權限//@RequiresRoles() -- 訪問此方法必須具備的角色/*** 1.過濾器:如果權限信息不匹配setUnauthorizedUrl地址* 2.注解:如果權限信息不匹配,拋出異常*/@RequiresPermissions("user-home")@RequestMapping(value = "/user/home")public String home() {return "訪問個人主頁成功";}//添加@RequestMapping(value = "/user",method = RequestMethod.POST)public String add() {return "添加用戶成功";}//查詢@RequestMapping(value = "/user",method = RequestMethod.GET)public String find() {return "查詢用戶成功";}//更新@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)public String update(String id) {return "更新用戶成功";}//刪除@RequestMapping(value = "/user/{id}",method = RequestMethod.DELETE)public String delete() {return "刪除用戶成功";}/*** 1.傳統登錄* 前端發送登錄請求 => 接口部分獲取用戶名密碼 => 程序員在接口部分手動控制* 2.shiro登錄* 前端發送登錄請求 => 接口部分獲取用戶名密碼 => 通過subject.login => realm域的認證方法**///用戶登錄@RequestMapping(value="/login")public String login(String username,String password) {//構造登錄令牌try {/*** 密碼加密:* shiro提供的md5加密* Md5Hash:* 參數一:加密的內容* 111111 --- abcd* 參數二:鹽(加密的混淆字符串)(用戶登錄的用戶名)* 111111+混淆字符串* 參數三:加密次數**/password = new Md5Hash(password,username,3).toString();UsernamePasswordToken upToken = new UsernamePasswordToken(username,password);//1.獲取subjectSubject subject = SecurityUtils.getSubject();//獲取sessionString sid = (String) subject.getSession().getId();//2.調用subject進行登錄subject.login(upToken);return "登錄成功";}catch (Exception e) {return "用戶名或密碼錯誤";}} } package cn.learn.shiro.dao;import cn.learn.shiro.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;/***?用戶數據訪問接口*/ public interface UserDao extends JpaRepository<User, String>, JpaSpecificationExecutor<User> {//根據手機號獲取用戶信息User findByUsername(String name); } package cn.learn.shiro.domain;import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import java.io.Serializable;@Entity @Table(name = "pe_permission") @Getter @Setter @NoArgsConstructor public class Permission implements Serializable {private static final long serialVersionUID = -4990810027542971546L;/*** 主鍵*/@Idprivate String id;private String name;private String code;private String description; } package cn.learn.shiro.domain;import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; import lombok.Setter;import javax.persistence.*; import java.io.Serializable; import java.util.HashSet; import java.util.Set;@Entity @Table(name = "pe_role") @Getter @Setter public class Role implements Serializable {private static final long serialVersionUID = 594829320797158219L;@Idprivate String id;private String name;private String description;//角色與用戶 多對多@ManyToMany(mappedBy="roles")private Set<User> users = new HashSet<User>(0);//角色與權限 多對多@ManyToMany(fetch = FetchType.EAGER)@JoinTable(name="pe_role_permission",joinColumns={@JoinColumn(name="role_id",referencedColumnName="id")},inverseJoinColumns={@JoinColumn(name="permission_id",referencedColumnName="id")})private Set<Permission> permissions = new HashSet<Permission>(0); } package cn.learn.shiro.domain;import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; import lombok.Setter;import javax.persistence.*; import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.Set;/*** 用戶實體類*/ @Entity @Table(name = "pe_user") @Getter @Setter public class User implements Serializable {private static final long serialVersionUID = 4297464181093070302L;/*** ID*/@Idprivate String id;private String username;private String password;@ManyToMany(fetch = FetchType.EAGER)@JoinTable(name="pe_user_role",joinColumns={@JoinColumn(name="user_id",referencedColumnName="id")},inverseJoinColumns={@JoinColumn(name="role_id",referencedColumnName="id")})private Set<Role> roles = new HashSet<Role>();//用戶與角色 多對多 } package cn.learn.shiro.service;import cn.learn.shiro.dao.UserDao; import cn.learn.shiro.domain.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;@Service public class UserService {@Autowiredprivate UserDao userDao;public User findByName(String name) {return this.userDao.findByUsername(name);}public List<User> findAll() {return userDao.findAll();} } package cn.learn.shiro;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.Bean; import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;@SpringBootApplication(scanBasePackages = "cn.learn") @EntityScan("cn.learn.shiro.domain") public class ShiroApplication {public static void main(String[] args) {SpringApplication.run(ShiroApplication.class, args);}@Beanpublic OpenEntityManagerInViewFilter openEntityManagerInViewFilter() {return new OpenEntityManagerInViewFilter();}} server:port: 8081 spring:application:name: ihrm-company #指定服務名datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/shiro_db?useUnicode=true&characterEncoding=utf8username: rootpassword: 123456jpa:database: MySQLshow-sql: trueopen-in-view: trueredis:host: 127.0.0.1port: 6379

?

總結

以上是生活随笔為你收集整理的Shiro与Springboot整合:配置依赖改造登录方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。