Skip to content

Commit de9bc5e

Browse files
committed
🆕新增 shiro 流程分析的环境
1 parent fcb76b2 commit de9bc5e

33 files changed

Lines changed: 690 additions & 0 deletions

‎JavaSecurity/Shiro/shiro/pom.xml‎

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>org.springframework.boot</groupId>
7+
<artifactId>spring-boot-starter-parent</artifactId>
8+
<version>2.7.1</version>
9+
<relativePath/> <!-- lookup parent from repository -->
10+
</parent>
11+
<groupId>com.example</groupId>
12+
<artifactId>shiro</artifactId>
13+
<version>0.0.1-SNAPSHOT</version>
14+
<name>shiro</name>
15+
<description>shiro</description>
16+
<properties>
17+
<java.version>1.8</java.version>
18+
</properties>
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.springframework.boot</groupId>
22+
<artifactId>spring-boot-starter-web</artifactId>
23+
</dependency>
24+
<dependency>
25+
<groupId>org.apache.shiro</groupId>
26+
<artifactId>shiro-spring</artifactId>
27+
<version>1.5.3</version>
28+
</dependency>
29+
<dependency>
30+
<groupId>org.projectlombok</groupId>
31+
<artifactId>lombok</artifactId>
32+
<optional>true</optional>
33+
</dependency>
34+
<dependency>
35+
<groupId>org.springframework.boot</groupId>
36+
<artifactId>spring-boot-starter-test</artifactId>
37+
<scope>test</scope>
38+
<exclusions>
39+
<exclusion>
40+
<groupId>org.junit.vintage</groupId>
41+
<artifactId>junit-vintage-engine</artifactId>
42+
</exclusion>
43+
</exclusions>
44+
</dependency>
45+
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
46+
<dependency>
47+
<groupId>org.apache.shiro</groupId>
48+
<artifactId>shiro-core</artifactId>
49+
<version>1.4.1</version>
50+
</dependency>
51+
<dependency>
52+
<groupId>org.springframework.boot</groupId>
53+
<artifactId>spring-boot-starter-thymeleaf</artifactId>
54+
</dependency>
55+
56+
57+
<dependency>
58+
<groupId>log4j</groupId>
59+
<artifactId>log4j</artifactId>
60+
<version>1.2.17</version>
61+
</dependency>
62+
<dependency>
63+
<groupId>mysql</groupId>
64+
<artifactId>mysql-connector-java</artifactId>
65+
</dependency>
66+
<dependency>
67+
<groupId>com.alibaba</groupId>
68+
<artifactId>druid</artifactId>
69+
<version>1.1.23</version>
70+
</dependency>
71+
<dependency>
72+
<groupId>org.mybatis.spring.boot</groupId>
73+
<artifactId>mybatis-spring-boot-starter</artifactId>
74+
<version>2.1.3</version>
75+
</dependency>
76+
</dependencies>
77+
78+
<build>
79+
<plugins>
80+
<plugin>
81+
<groupId>org.springframework.boot</groupId>
82+
<artifactId>spring-boot-maven-plugin</artifactId>
83+
<configuration>
84+
<excludes>
85+
<exclude>
86+
<groupId>org.projectlombok</groupId>
87+
<artifactId>lombok</artifactId>
88+
</exclude>
89+
</excludes>
90+
</configuration>
91+
</plugin>
92+
</plugins>
93+
</build>
94+
95+
</project>

‎JavaSecurity/Shiro/shiro/shiro.iml‎

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="web" name="Web">
5+
<configuration>
6+
<webroots />
7+
<sourceRoots>
8+
<root url="file://$MODULE_DIR$/src/main/java" />
9+
<root url="file://$MODULE_DIR$/src/main/resources" />
10+
</sourceRoots>
11+
</configuration>
12+
</facet>
13+
<facet type="Spring" name="Spring">
14+
<configuration />
15+
</facet>
16+
</component>
17+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
18+
<output url="file://$MODULE_DIR$/target/classes" />
19+
<output-test url="file://$MODULE_DIR$/target/test-classes" />
20+
<content url="file://$MODULE_DIR$">
21+
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
22+
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
23+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
24+
<excludeFolder url="file://$MODULE_DIR$/target" />
25+
</content>
26+
<orderEntry type="inheritedJdk" />
27+
<orderEntry type="sourceFolder" forTests="false" />
28+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.7.1" level="project" />
29+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.7.1" level="project" />
30+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.7.1" level="project" />
31+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.7.1" level="project" />
32+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.7.1" level="project" />
33+
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
34+
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
35+
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
36+
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
37+
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
38+
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
39+
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.30" level="project" />
40+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.7.1" level="project" />
41+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.3" level="project" />
42+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.3" level="project" />
43+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.3" level="project" />
44+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.3" level="project" />
45+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3" level="project" />
46+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.3" level="project" />
47+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.7.1" level="project" />
48+
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.64" level="project" />
49+
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.64" level="project" />
50+
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.64" level="project" />
51+
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.21" level="project" />
52+
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.21" level="project" />
53+
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.21" level="project" />
54+
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.21" level="project" />
55+
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.21" level="project" />
56+
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.21" level="project" />
57+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.5.3" level="project" />
58+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.5.3" level="project" />
59+
<orderEntry type="library" name="Maven: org.owasp.encoder:encoder:1.2.2" level="project" />
60+
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.24" level="project" />
61+
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.7.1" level="project" />
62+
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.7.1" level="project" />
63+
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.7.1" level="project" />
64+
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.7.0" level="project" />
65+
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.8" level="project" />
66+
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.8" level="project" />
67+
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:9.1" level="project" />
68+
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
69+
<orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
70+
<orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
71+
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.22.0" level="project" />
72+
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
73+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.8.2" level="project" />
74+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.8.2" level="project" />
75+
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
76+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.8.2" level="project" />
77+
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" />
78+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.8.2" level="project" />
79+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.8.2" level="project" />
80+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.8.2" level="project" />
81+
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:4.5.1" level="project" />
82+
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.12.11" level="project" />
83+
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.12.11" level="project" />
84+
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
85+
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:4.5.1" level="project" />
86+
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
87+
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
88+
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.21" level="project" />
89+
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.21" level="project" />
90+
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.21" level="project" />
91+
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.9.0" level="project" />
92+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.1" level="project" />
93+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.1" level="project" />
94+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.1" level="project" />
95+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.1" level="project" />
96+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.1" level="project" />
97+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.1" level="project" />
98+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.1" level="project" />
99+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.1" level="project" />
100+
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" />
101+
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
102+
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.1" level="project" />
103+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:2.7.1" level="project" />
104+
<orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf-spring5:3.0.15.RELEASE" level="project" />
105+
<orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf:3.0.15.RELEASE" level="project" />
106+
<orderEntry type="library" name="Maven: org.attoparser:attoparser:2.0.5.RELEASE" level="project" />
107+
<orderEntry type="library" name="Maven: org.unbescape:unbescape:1.1.6.RELEASE" level="project" />
108+
<orderEntry type="library" name="Maven: org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE" level="project" />
109+
<orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
110+
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.29" level="project" />
111+
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.23" level="project" />
112+
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
113+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.7.1" level="project" />
114+
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
115+
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.21" level="project" />
116+
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.21" level="project" />
117+
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
118+
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
119+
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
120+
</component>
121+
</module>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package shiro;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.boot.SpringApplication;
5+
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
import shiro.service.UserService;
7+
8+
@SpringBootApplication
9+
public class ShiroApplication {
10+
11+
@Autowired
12+
UserService userService;
13+
14+
public static void main(String[] args) {
15+
SpringApplication.run(ShiroApplication.class, args);
16+
}
17+
18+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package shiro.config;
2+
3+
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
4+
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
5+
import org.springframework.beans.factory.annotation.Qualifier;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
9+
import java.util.LinkedHashMap;
10+
import java.util.Map;
11+
12+
@Configuration
13+
public class ShiroConfig {
14+
// ShiroFilterFactoryBean
15+
@Bean
16+
public ShiroFilterFactoryBean getShiroFilterFactoryBean(
17+
@Qualifier("getDefaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
18+
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
19+
// 设置安全管理器
20+
bean.setSecurityManager(defaultWebSecurityManager);
21+
22+
// 添加 shiro 的内置过滤器
23+
/*
24+
anon:无需认证即可访问
25+
authc:必须认证了才能访问
26+
user:必须拥有 记住我功能才能使用
27+
perms:拥有对某个资源的权限才能访问
28+
role:拥有某个角色权限
29+
*/
30+
31+
// 拦截
32+
Map<String, String > filterMap = new LinkedHashMap<>();
33+
34+
filterMap.put("/user/add","perms[user:add]");
35+
filterMap.put("/user/update","perms[user:update]");
36+
37+
filterMap.put("/user/*", "authc");
38+
bean.setFilterChainDefinitionMap(filterMap);
39+
40+
bean.setLoginUrl("/toLogin");
41+
bean.setUnauthorizedUrl("/noauth");
42+
return bean;
43+
}
44+
45+
// DefaultWebSecurityManager
46+
@Bean
47+
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
48+
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
49+
50+
// 关联 UserRealm
51+
securityManager.setRealm(userRealm);
52+
return securityManager;
53+
}
54+
55+
// 创建 realm 对象
56+
@Bean
57+
public UserRealm userRealm(){
58+
return new UserRealm();
59+
}
60+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package shiro.config;
2+
3+
import org.apache.shiro.SecurityUtils;
4+
import org.apache.shiro.authc.*;
5+
import org.apache.shiro.authz.AuthorizationInfo;
6+
import org.apache.shiro.authz.SimpleAuthorizationInfo;
7+
import org.apache.shiro.realm.AuthorizingRealm;
8+
import org.apache.shiro.subject.PrincipalCollection;
9+
import org.apache.shiro.subject.Subject;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import shiro.pojo.User;
12+
import shiro.service.UserService;
13+
import shiro.service.UserServiceImpl;
14+
15+
// 自定义的 Realm
16+
public class UserRealm extends AuthorizingRealm {
17+
18+
@Autowired
19+
UserService userService;
20+
21+
// 授权
22+
@Override
23+
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
24+
System.out.println("执行了=>授权doGetAuthorizationInfo");
25+
26+
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
27+
28+
Subject subject = SecurityUtils.getSubject();
29+
User currentUser = (User) subject.getPrincipal();
30+
31+
info.addStringPermission(currentUser.getPerms());
32+
return info;
33+
}
34+
35+
@Override
36+
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
37+
System.out.println("执行了=>认证doGetAuthorizationInfo");
38+
39+
// 数据库中取用户名与密码
40+
41+
UsernamePasswordToken userToken = (UsernamePasswordToken) token;
42+
43+
User user = userService.queryUserByName(userToken.getUsername());
44+
45+
if (user == null){
46+
return null; // 自动抛出异常
47+
}
48+
49+
// 密码认证,shiro 完成
50+
return new SimpleAuthenticationInfo(user,user.getPwd(),"");
51+
}
52+
}

0 commit comments

Comments
 (0)