1.在pom.xml中添加:
复制代码
1
2
3
4
5
6
7
8
9
10<dependency> <groupId>org.pac4j</groupId> <artifactId>pac4j-cas</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>io.buji</groupId> <artifactId>buji-pac4j</artifactId> <version>3.0.0</version> </dependency>
复制代码
1
复制代码
1
复制代码
12.新增Pac4jConfig.java文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81复制代码import org.pac4j.cas.client.CasClient; import org.pac4j.cas.config.CasConfiguration; import org.pac4j.core.authorization.authorizer.RequireAnyRoleAuthorizer; import org.pac4j.core.client.Clients; import org.pac4j.core.config.Config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Pac4jConfig { //地址为:cas地址 @Value("${shiro.cas}") String casServerUrlPrefix; //地址为:验证返回后的项目地址:http://localhost:8080 @Value("${shiro.server}") String shiroServerUrlPrefix; //相当于一个标志,可以随意,shiroConfig中也会用到 @Value("${pac4j.clientName}") String clientName; @Bean public Config config() { // CAS final CasConfiguration configuration = new CasConfiguration(casServerUrlPrefix + "/login", casServerUrlPrefix); configuration.setAcceptAnyProxy(true); CasClient casClient = new CasClient(configuration); casClient.setCallbackUrl(shiroServerUrlPrefix + "/callback?client_name=" + clientName); casClient.setName(clientName); final Clients clients = new Clients(shiroServerUrlPrefix + "/callback?client_name="+clientName, casClient); final Config config = new Config(clients); return config; } }
3.修改ShiroConfig.java文件
复制代码
1
复制代码
1增加
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59复制代码//引用的包 import org.pac4j.core.config.Config; //需要注入 @Autowired private Config config; //在类中添加下面三个方法 @Bean(name = "securityManager") public SecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); Pac4jRealm casRealm = pac4jRealm(); securityManager.setRealm(casRealm); securityManager.setSubjectFactory(subjectFactory()); //securityManager.setCacheManager(ehCacheManager()); return securityManager; } @Bean(name = "pac4jRealm") public Pac4jRealm pac4jRealm() { //Pac4jRealm realm = new MyShiroRealm(); Pac4jRealm myShiroRealm = new MyShiroRealm(); return myShiroRealm; } @Bean(name = "subjectFactory") public Pac4jSubjectFactory subjectFactory() { Pac4jSubjectFactory subjectFactory = new Pac4jSubjectFactory(); return subjectFactory; }
复制代码
1修改Bean shiroFilter 方法,增加
复制代码
1
复制代码
1
2
3
4CallbackFilter callbackFilter = new CallbackFilter(); callbackFilter.setConfig(config); callbackFilter.setDefaultUrl("/starter"); shiroFilterFactoryBean.getFilters().put("casFilter", callbackFilter);
复制代码
//拦截器中增加callback的拦截
1
2
复制代码
1
复制代码
1Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
复制代码
1
复制代码
1filterChainDefinitionMap.put("/callback", "casFilter");
复制代码
//loginUrl中需要加上clinetname
1shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
复制代码
1
复制代码
1
2String loginUrl = casServerUrlPrefix + "/login?service=" + shiroServerUrlPrefix + "/callback?client_name=" + clientName; shiroFilterFactoryBean.setLoginUrl(loginUrl);
复制代码
1
复制代码
1
复制代码
14.自定义的Realm不再继承自CasRealm,修改为Pac4jRealm,并且修改其中的方法
复制代码
1
复制代码
1
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { final Pac4jToken token = (Pac4jToken) authenticationToken; final LinkedHashMap<String, CommonProfile> profiles = token.getProfiles(); final Pac4jPrincipal principal = new Pac4jPrincipal(profiles); String loginName = principal.getProfile().getId(); Session session = SecurityUtils.getSubject().getSession(); session.setAttribute("userSessionId", loginName ); return new SimpleAuthenticationInfo(user, profiles.hashCode(), getName()); }
复制代码
//此方法的逻辑不变,还是在此处赋请求链接权限,只是改变获取用户的方法更改一下,可以将本地查询的用户信息保存在doGetAuthenticationInfo方法中,此方法可以直接取出来
1
2
复制代码
1
2
3
4
5
6
7
8
9
10
11
12@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { //获取当前登录输入的用户名,等价于(String) principalCollection.fromRealm(getName()).iterator().next(); Session session = SecurityUtils.getSubject().getSession(); String loginName = (String)session.getAttribute("name"); return info; }
复制代码
1
最后
以上就是和谐超短裙最近收集整理的关于springboot 下将shiro-cas替换为buji-pac4j的全部内容,更多相关springboot内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复