- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章spring boot整合CAS配置详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在下不才,以下是我花了好几天的时间才整合出来的在spring boot里面的CAS配置整合 。
为了帮助没搞定的人,毕竟自己踩了很多坑,一步一步爬过来的,有什么不足之处可以给建议 谢谢(小部分代码是整合他人的) 。
1.不多废话,直接上最重要的代码,以下代码整合cas的重要过程 。
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
import
org.jasig.cas.client.authentication.AuthenticationFilter;
import
org.jasig.cas.client.session.SingleSignOutFilter;
import
org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import
org.jasig.cas.client.util.AssertionThreadLocalFilter;
import
org.jasig.cas.client.util.HttpServletRequestWrapperFilter;
import
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter;
import
org.jasig.cas.client.validation.Cas20ServiceTicketValidator;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.boot.web.servlet.FilterRegistrationBean;
import
org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import
org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration;
import
org.springframework.security.cas.ServiceProperties;
import
org.springframework.security.cas.authentication.CasAuthenticationProvider;
import
org.springframework.security.cas.userdetails.GrantedAuthorityFromAssertionAttributesUserDetailsService;
import
org.springframework.security.web.authentication.logout.LogoutFilter;
import
org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import
java.util.List;
@Configuration
public
class
CasConfig {
@Autowired
SpringCasAutoconfig autoconfig;
private
static
boolean
casEnabled =
true
;
public
CasConfig() {
}
@Bean
public
SpringCasAutoconfig getSpringCasAutoconfig(){
return
new
SpringCasAutoconfig();
}
/**
* 用于实现单点登出功能
*/
@Bean
public
ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> singleSignOutHttpSessionListener() {
ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> listener =
new
ServletListenerRegistrationBean<>();
listener.setEnabled(casEnabled);
listener.setListener(
new
SingleSignOutHttpSessionListener());
listener.setOrder(
1
);
return
listener;
}
/**
* 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前
*/
@Bean
public
FilterRegistrationBean logOutFilter() {
FilterRegistrationBean filterRegistration =
new
FilterRegistrationBean();
LogoutFilter logoutFilter =
new
LogoutFilter(autoconfig.getCasServerUrlPrefix() +
"/logout?service="
+ autoconfig.getServerName(),
new
SecurityContextLogoutHandler());
filterRegistration.setFilter(logoutFilter);
filterRegistration.setEnabled(casEnabled);
if
(autoconfig.getSignOutFilters().size()>
0
)
filterRegistration.setUrlPatterns(autoconfig.getSignOutFilters());
else
filterRegistration.addUrlPatterns(
"/logout"
);
filterRegistration.addInitParameter(
"casServerUrlPrefix"
, autoconfig.getCasServerUrlPrefix());
filterRegistration.addInitParameter(
"serverName"
, autoconfig.getServerName());
filterRegistration.setOrder(
2
);
return
filterRegistration;
}
/**
* 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前
*/
@Bean
public
FilterRegistrationBean singleSignOutFilter() {
FilterRegistrationBean filterRegistration =
new
FilterRegistrationBean();
filterRegistration.setFilter(
new
SingleSignOutFilter());
filterRegistration.setEnabled(casEnabled);
if
(autoconfig.getSignOutFilters().size()>
0
)
filterRegistration.setUrlPatterns(autoconfig.getSignOutFilters());
else
filterRegistration.addUrlPatterns(
"/*"
);
filterRegistration.addInitParameter(
"casServerUrlPrefix"
, autoconfig.getCasServerUrlPrefix());
filterRegistration.addInitParameter(
"serverName"
, autoconfig.getServerName());
filterRegistration.setOrder(
3
);
return
filterRegistration;
}
/**
* 该过滤器负责用户的认证工作
*/
@Bean
public
FilterRegistrationBean authenticationFilter() {
FilterRegistrationBean filterRegistration =
new
FilterRegistrationBean();
filterRegistration.setFilter(
new
AuthenticationFilter());
filterRegistration.setEnabled(casEnabled);
if
(autoconfig.getAuthFilters().size()>
0
)
filterRegistration.setUrlPatterns(autoconfig.getAuthFilters());
else
filterRegistration.addUrlPatterns(
"/*"
);
//casServerLoginUrl:cas服务的登陆url
filterRegistration.addInitParameter(
"casServerLoginUrl"
, autoconfig.getCasServerLoginUrl());
//本项目登录ip+port
filterRegistration.addInitParameter(
"serverName"
, autoconfig.getServerName());
filterRegistration.addInitParameter(
"useSession"
, autoconfig.isUseSession()?
"true"
:
"false"
);
filterRegistration.addInitParameter(
"redirectAfterValidation"
, autoconfig.isRedirectAfterValidation()?
"true"
:
"false"
);
filterRegistration.setOrder(
4
);
return
filterRegistration;
}
/**
* 该过滤器负责对Ticket的校验工作
*/
@Bean
public
FilterRegistrationBean cas20ProxyReceivingTicketValidationFilter() {
FilterRegistrationBean filterRegistration =
new
FilterRegistrationBean();
Cas20ProxyReceivingTicketValidationFilter cas20ProxyReceivingTicketValidationFilter =
new
Cas20ProxyReceivingTicketValidationFilter();
//cas20ProxyReceivingTicketValidationFilter.setTicketValidator(cas20ServiceTicketValidator());
cas20ProxyReceivingTicketValidationFilter.setServerName(autoconfig.getServerName());
filterRegistration.setFilter(cas20ProxyReceivingTicketValidationFilter);
filterRegistration.setEnabled(casEnabled);
if
(autoconfig.getValidateFilters().size()>
0
)
filterRegistration.setUrlPatterns(autoconfig.getValidateFilters());
else
filterRegistration.addUrlPatterns(
"/*"
);
filterRegistration.addInitParameter(
"casServerUrlPrefix"
, autoconfig.getCasServerUrlPrefix());
filterRegistration.addInitParameter(
"serverName"
, autoconfig.getServerName());
filterRegistration.setOrder(
5
);
return
filterRegistration;
}
/**
* 该过滤器对HttpServletRequest请求包装, 可通过HttpServletRequest的getRemoteUser()方法获得登录用户的登录名
*
*/
@Bean
public
FilterRegistrationBean httpServletRequestWrapperFilter() {
FilterRegistrationBean filterRegistration =
new
FilterRegistrationBean();
filterRegistration.setFilter(
new
HttpServletRequestWrapperFilter());
filterRegistration.setEnabled(
true
);
if
(autoconfig.getRequestWrapperFilters().size()>
0
)
filterRegistration.setUrlPatterns(autoconfig.getRequestWrapperFilters());
else
filterRegistration.addUrlPatterns(
"/*"
);
filterRegistration.setOrder(
6
);
return
filterRegistration;
}
/**
* 该过滤器使得可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
这个类把Assertion信息放在ThreadLocal变量中,这样应用程序不在web层也能够获取到当前登录信息
*/
@Bean
public
FilterRegistrationBean assertionThreadLocalFilter() {
FilterRegistrationBean filterRegistration =
new
FilterRegistrationBean();
filterRegistration.setFilter(
new
AssertionThreadLocalFilter());
filterRegistration.setEnabled(
true
);
if
(autoconfig.getAssertionFilters().size()>
0
)
filterRegistration.setUrlPatterns(autoconfig.getAssertionFilters());
else
filterRegistration.addUrlPatterns(
"/*"
);
filterRegistration.setOrder(
7
);
return
filterRegistration;
}
}
|
2.为了让你们更省力且直接的看到效果,我把相关配置也贴出来 。
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
82
83
84
85
|
import
org.springframework.boot.context.properties.ConfigurationProperties;
import
org.springframework.context.annotation.Configuration;
import
java.util.Arrays;
import
java.util.List;
@ConfigurationProperties
(prefix =
"spring.cas"
)
public
class
SpringCasAutoconfig {
static
final
String separator =
","
;
private
String validateFilters;
private
String signOutFilters;
private
String authFilters;
private
String assertionFilters;
private
String requestWrapperFilters;
private
String casServerUrlPrefix;
private
String casServerLoginUrl;
private
String serverName;
private
boolean
useSession =
true
;
private
boolean
redirectAfterValidation =
true
;
public
List<String> getValidateFilters() {
return
Arrays.asList(validateFilters.split(separator));
}
public
void
setValidateFilters(String validateFilters) {
this
.validateFilters = validateFilters;
}
public
List<String> getSignOutFilters() {
return
Arrays.asList(signOutFilters.split(separator));
}
public
void
setSignOutFilters(String signOutFilters) {
this
.signOutFilters = signOutFilters;
}
public
List<String> getAuthFilters() {
return
Arrays.asList(authFilters.split(separator));
}
public
void
setAuthFilters(String authFilters) {
this
.authFilters = authFilters;
}
public
List<String> getAssertionFilters() {
return
Arrays.asList(assertionFilters.split(separator));
}
public
void
setAssertionFilters(String assertionFilters) {
this
.assertionFilters = assertionFilters;
}
public
List<String> getRequestWrapperFilters() {
return
Arrays.asList(requestWrapperFilters.split(separator));
}
public
void
setRequestWrapperFilters(String requestWrapperFilters) {
this
.requestWrapperFilters = requestWrapperFilters;
}
public
String getCasServerUrlPrefix() {
return
casServerUrlPrefix;
}
public
void
setCasServerUrlPrefix(String casServerUrlPrefix) {
this
.casServerUrlPrefix = casServerUrlPrefix;
}
public
String getCasServerLoginUrl() {
return
casServerLoginUrl;
}
public
void
setCasServerLoginUrl(String casServerLoginUrl) {
this
.casServerLoginUrl = casServerLoginUrl;
}
public
String getServerName() {
return
serverName;
}
public
void
setServerName(String serverName) {
this
.serverName = serverName;
}
public
boolean
isRedirectAfterValidation() {
return
redirectAfterValidation;
}
public
void
setRedirectAfterValidation(
boolean
redirectAfterValidation) {
this
.redirectAfterValidation = redirectAfterValidation;
}
public
boolean
isUseSession() {
return
useSession;
}
public
void
setUseSession(
boolean
useSession) {
this
.useSession = useSession;
}
}
|
3.配置文件 dev.yml 。
1
2
3
4
5
6
7
8
9
10
11
12
|
#cas client config
spring:cas:
sign-out-filters: /logout
auth-filters: /*
validate-filters: /*
request-wrapper-filters: /*
assertion-filters: /*
cas-server-login-url: cas登录url
cas-server-url-prefix:cas登录域名
redirect-after-validation: true
use-session: true
server-name: http://localhost:8080
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://blog.csdn.net/jw314947712/article/details/54236216 。
最后此篇关于spring boot整合CAS配置详解的文章就讲到这里了,如果你想了解更多关于spring boot整合CAS配置详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言 这个东西有啥用,好玩? 确实, 好玩归好玩,其实很有使用场景。 可以自己选则一些业务节点触发这个机器人助手的消息推送; 简单举例: 有人给你的系统留下反馈意见了,推送到运营群去; 2.项目部署成
1. JWT 简介 JSON Web Token(JWT) 是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。该信息可以被验证和信
我的页面上有多个 ajax 调用,我想将它们合并为一个函数。 目前我在几个地方都有这种类型的功能: function AjaxCallOne () { //do something $.ajax(
我的 Facebook 集成基本上可以在我的应用程序中运行:出现 Facebook 对话框,用户可以选择“允许”或“不允许”。但是,我不明白 API 是如何工作的!我有一个使用此代码的 Activit
我必须将文件夹结构从我的应用程序共享到 OneDrive。 我已经检查了一个驱动器的 sdk,但在那个 sdk 中只能共享文件而不是文件夹,并且没有在该 sdk 中创建文件夹的选项 https://g
我是支付网关集成方面的新手。我必须在我的项目 (CORE PHP) 中集成 CCAvenue 支付网关集成。但是我不知道如何为开发人员测试创建商户帐户,如何获取商户 key 等。我已经进行了研发,但是
我正在尝试将“社交选项”集成到我的应用程序中。 我有 iOS6,但我的想法是有一个适用于 iOS5 的应用程序。使用 Twitter 框架非常简单,并且可以在 r.0 版本和 6.0 版本的设备上运行
我正在尝试将 flurryAds 集成到我的 iPhone 应用程序中,但我无法做到这一点。我导入名为 的 .h 文件 #import "Flurry.h" #import "FlurryAds.h"
我正在尝试在我的网站中实现类似 facebook 的按钮和评论,但我在 IE7 中遇到了评论框问题。 COMMENT USING 下拉框不知何故没有显示其他可用选项。这是我用来实现它的代码片段:
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve th
我正在使用 SOAP API 进行 PayPal 集成(Express Checkout)。在 DoExpressCheckout 调用后,我调用 GetExpressCheckoutDetails。
我正在尝试将 paypal 作为支付网关之一集成到我的应用程序中,但在我点击支付按钮后它会返回以下错误。 错误 java.lang.RuntimeException:无法使用 Intent { cmp
我目前正在尝试将 paypal 结账与我们的在线商店集成。我们正在针对 Sandbox 进行测试。除了 IPN(即时付款通知)之外的所有内容都有效。 我们阅读了很多有关 Paypal 更改其安全模型的
我正在开发一个 android 应用程序,我想在其中集成 facebook 之类的。我正在浏览链接 http://developers.facebook.com/docs/guides/mobile/
所以我正在尝试构建一个集成了 FitBit 的 iOS 应用程序 (Swift 2)。 一旦用户打开“步行”页面,用户应该能够看到他每天的步数。 理想情况下,我们不希望每个用户都注册到 FitBit。
我是集成投递箱的新手,但我不太确定如何生成调用以获取请求 token secret 。 https://www.dropbox.com/developers/reference/api#request
我已经成功集成了 PayPal。一切正常。但我希望我的表格在成功付款后重定向到我的网站。另一个问题:如何从 PayPal 得到回应?这是我的 Paypal 表格。谢谢。 `
我在我的 Android 应用程序中集成了 Paypal 。我有一个主要 Activity - 和关于 Activity ,我在其中显示 Paypal 按钮。关于从主 Activity 访问的 Act
前言: 小编引入的图片和文字描述都是来自于尚硅谷的视频讲解,在此感谢尚硅谷的老师,同时也结合 seata文档官方文档进行整合 项目地址(gitee): https://gitee.com/qine
目录 1. demo project 1.1 接口准备 1.2 配置准备 2. docker 开启远程连接
我是一名优秀的程序员,十分优秀!