- 浏览: 2499302 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
nation:
你好,在部署Mesos+Spark的运行环境时,出现一个现象, ...
Spark(4)Deal with Mesos -
sillycat:
AMAZON Relatedhttps://www.godad ...
AMAZON API Gateway(2)Client Side SSL with NGINX -
sillycat:
sudo usermod -aG docker ec2-use ...
Docker and VirtualBox(1)Set up Shared Disk for Virtual Box -
sillycat:
Every Half an Hour30 * * * * /u ...
Build Home NAS(3)Data Redundancy -
sillycat:
3 List the Cron Job I Have>c ...
Build Home NAS(3)Data Redundancy
springsecurity应用之支持URL传参登陆
项目中使用了spring security来做登陆的安全控制。按照官方文档弄好了。但是最近项目中又出来一个新需求,另外一个系统的用户,
需要用这样的模式来登录本系统:
http://url?username=test&password=test&returnurl=url
在别人的系统中,直接通过这三个参数,到我们的系统来查看某页面,虽然不情愿,但是也没有办法,唉,我们的系统式弱势系统,别人强势。NND。
查看了spring security的文档,同时也参考了一下源码,总算找到个解决方案:
主要查看和参考了源码中的这几个类:
ExceptionTranslationFilter
TargetUrlResolverImpl
AbstractProcessingFilter
AuthenticationProcessingFilter
其中最关键的类
AuthenticationProcessingFilter.java核心方法如下,这个方法主要是负责处理用户名和密码,由于那个强势系统要求传递过来的密码进行了BASE64加密,所以我要在这里BASE64解密一下
所以,我写了一个类似这个Filter的类,配置在配置文件上。
public Authentication attemptAuthentication(HttpServletRequest request) throws AuthenticationException {
String username = obtainUsername(request);
String password = obtainPassword(request);
if (username == null) {
username = "";
}
if (password == null) {
password = "";
}
username = username.trim();
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
HttpSession session = request.getSession(false);
if (session != null || getAllowSessionCreation()) {
request.getSession().setAttribute(SPRING_SECURITY_LAST_USERNAME_KEY, TextUtils.escapeEntities(username));
}
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
}
配置文件如下:
<beans:bean id="authenticationProcessingFilter"
class="cn.sccl.um.security.CustomerAuthenticationProcessingFilter">
<custom-filter before="AUTHENTICATION_PROCESSING_FILTER" />
<beans:property name="authenticationManager" ref="authenticationManager" />
<beans:property name="authenticationFailureUrl" value="/user/login.do" />
<beans:property name="defaultTargetUrl" value="/portal/portal.do" />
<beans:property name="filterProcessesUrl" value="/jspringsecuritycheck.do" />
<beans:property name="usernameParameter" value="${security.username}" />
<beans:property name="passwordParameter" value="${security.password}" />
</beans:bean>
在我的CustomerAuthenticationProcessingFilter类中,和AuthenticationProcessingFilter代码相同,唯一就是加入了
拿到password后,再base64解密一下的代码。
然后跟代码,查看到TargetUrlResolverImpl关键类的核心方法:
public String determineTargetUrl(SavedRequest savedRequest, HttpServletRequest currentRequest,
Authentication auth) {
String targetUrl = currentRequest.getParameter(targetUrlParameter);
if (StringUtils.hasText(targetUrl)) {
try {
return URLDecoder.decode(targetUrl, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("UTF-8 not supported. Shouldn't be possible");
}
}
if (savedRequest != null) {
if (!justUseSavedRequestOnGet || savedRequest.getMethod().equals("GET")) {
targetUrl = savedRequest.getFullRequestUrl();
}
}
return targetUrl;
}
这就是决定登陆成功后,向哪个URL转向滴,一般就是默认配置在defaultTargetUrl里面。如果想自己根据传递过来的URL参数来决定转向页面,
那么这里类TargetUrlResolverImpl中的代码
public static String DEFAULT_TARGET_PARAMETER = "spring-security-redirect";
这就是接受这个URL的参数KEY。
那么最终,我们的URL接口就做成了如下:
http://localhost/jspringsecuritycheck.do?spring-security-redirect=reurl&j_username=test&j_password=MTExMTEx
如果URL参数里面的值有参数的,那么需要urlencode一下,比如形如这样的URL参数
http://localhost/workflow/excuteWorkitem4Oa.do?processInstId=111&name=test&type=1 会urlencode成这样:
http://localhost/workflow/excuteWorkitem4Oa.do?processInstId=111%26name%3Dtest%26type%3D1
项目中使用了spring security来做登陆的安全控制。按照官方文档弄好了。但是最近项目中又出来一个新需求,另外一个系统的用户,
需要用这样的模式来登录本系统:
http://url?username=test&password=test&returnurl=url
在别人的系统中,直接通过这三个参数,到我们的系统来查看某页面,虽然不情愿,但是也没有办法,唉,我们的系统式弱势系统,别人强势。NND。
查看了spring security的文档,同时也参考了一下源码,总算找到个解决方案:
主要查看和参考了源码中的这几个类:
ExceptionTranslationFilter
TargetUrlResolverImpl
AbstractProcessingFilter
AuthenticationProcessingFilter
其中最关键的类
AuthenticationProcessingFilter.java核心方法如下,这个方法主要是负责处理用户名和密码,由于那个强势系统要求传递过来的密码进行了BASE64加密,所以我要在这里BASE64解密一下
所以,我写了一个类似这个Filter的类,配置在配置文件上。
public Authentication attemptAuthentication(HttpServletRequest request) throws AuthenticationException {
String username = obtainUsername(request);
String password = obtainPassword(request);
if (username == null) {
username = "";
}
if (password == null) {
password = "";
}
username = username.trim();
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
HttpSession session = request.getSession(false);
if (session != null || getAllowSessionCreation()) {
request.getSession().setAttribute(SPRING_SECURITY_LAST_USERNAME_KEY, TextUtils.escapeEntities(username));
}
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
}
配置文件如下:
<beans:bean id="authenticationProcessingFilter"
class="cn.sccl.um.security.CustomerAuthenticationProcessingFilter">
<custom-filter before="AUTHENTICATION_PROCESSING_FILTER" />
<beans:property name="authenticationManager" ref="authenticationManager" />
<beans:property name="authenticationFailureUrl" value="/user/login.do" />
<beans:property name="defaultTargetUrl" value="/portal/portal.do" />
<beans:property name="filterProcessesUrl" value="/jspringsecuritycheck.do" />
<beans:property name="usernameParameter" value="${security.username}" />
<beans:property name="passwordParameter" value="${security.password}" />
</beans:bean>
在我的CustomerAuthenticationProcessingFilter类中,和AuthenticationProcessingFilter代码相同,唯一就是加入了
拿到password后,再base64解密一下的代码。
然后跟代码,查看到TargetUrlResolverImpl关键类的核心方法:
public String determineTargetUrl(SavedRequest savedRequest, HttpServletRequest currentRequest,
Authentication auth) {
String targetUrl = currentRequest.getParameter(targetUrlParameter);
if (StringUtils.hasText(targetUrl)) {
try {
return URLDecoder.decode(targetUrl, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("UTF-8 not supported. Shouldn't be possible");
}
}
if (savedRequest != null) {
if (!justUseSavedRequestOnGet || savedRequest.getMethod().equals("GET")) {
targetUrl = savedRequest.getFullRequestUrl();
}
}
return targetUrl;
}
这就是决定登陆成功后,向哪个URL转向滴,一般就是默认配置在defaultTargetUrl里面。如果想自己根据传递过来的URL参数来决定转向页面,
那么这里类TargetUrlResolverImpl中的代码
public static String DEFAULT_TARGET_PARAMETER = "spring-security-redirect";
这就是接受这个URL的参数KEY。
那么最终,我们的URL接口就做成了如下:
http://localhost/jspringsecuritycheck.do?spring-security-redirect=reurl&j_username=test&j_password=MTExMTEx
如果URL参数里面的值有参数的,那么需要urlencode一下,比如形如这样的URL参数
http://localhost/workflow/excuteWorkitem4Oa.do?processInstId=111&name=test&type=1 会urlencode成这样:
http://localhost/workflow/excuteWorkitem4Oa.do?processInstId=111%26name%3Dtest%26type%3D1
发表评论
-
Update Site will come soon
2021-06-02 04:10 1623I am still keep notes my tech n ... -
Portainer 2020(4)Deploy Nginx and Others
2020-03-20 12:06 389Portainer 2020(4)Deploy Nginx a ... -
Private Registry 2020(1)No auth in registry Nginx AUTH for UI
2020-03-18 00:56 388Private Registry 2020(1)No auth ... -
Docker Compose 2020(1)Installation and Basic
2020-03-15 08:10 342Docker Compose 2020(1)Installat ... -
VPN Server 2020(2)Docker on CentOS in Ubuntu
2020-03-02 08:04 416VPN Server 2020(2)Docker on Cen ... -
Nginx Deal with OPTIONS in HTTP Protocol
2020-02-15 01:33 313Nginx Deal with OPTIONS in HTTP ... -
PDF to HTML 2020(1)pdftohtml Linux tool or PDFBox
2020-01-29 07:37 353PDF to HTML 2020(1)pdftohtml Li ... -
Elasticsearch Cluster 2019(2)Kibana Issue or Upgrade
2020-01-12 03:25 613Elasticsearch Cluster 2019(2)Ki ... -
Spark Streaming 2020(1)Investigation
2020-01-08 07:19 238Spark Streaming 2020(1)Investig ... -
Hadoop Docker 2019 Version 3.2.1
2019-12-10 07:39 262Hadoop Docker 2019 Version 3.2. ... -
MongoDB 2019(3)Security and Auth
2019-11-16 06:48 213MongoDB 2019(3)Security and Aut ... -
MongoDB 2019(1)Install 4.2.1 Single and Cluster
2019-11-11 05:07 263MongoDB 2019(1) Follow this ht ... -
Monitor Tool 2019(1)Monit Installation and Usage
2019-10-17 08:22 297Monitor Tool 2019(1)Monit Insta ... -
Ansible 2019(1)Introduction and Installation on Ubuntu and CentOS
2019-10-12 06:15 283Ansible 2019(1)Introduction and ... -
Timezone and Time on All Servers and Docker Containers
2019-10-10 11:18 303Timezone and Time on All Server ... -
Kafka Cluster 2019(6) 3 Nodes Cluster on CentOS7
2019-10-05 23:28 249Kafka Cluster 2019(6) 3 Nodes C ... -
K8S Helm(1)Understand YAML and Kubectl Pod and Deployment
2019-10-01 01:21 294K8S Helm(1)Understand YAML and ... -
Rancher and k8s 2019(5)Private Registry
2019-09-27 03:25 334Rancher and k8s 2019(5)Private ... -
Jenkins 2019 Cluster(1)Version 2.194
2019-09-12 02:53 415Jenkins 2019 Cluster(1)Version ... -
Redis Cluster 2019(3)Redis Cluster on CentOS
2019-08-17 04:07 344Redis Cluster 2019(3)Redis Clus ...
相关推荐
springSecurity 实现登陆验证、传参,包括源代码和MYSQL的建库脚本。 传参的功能可以实现记录登陆之前打开的页面,登陆之后自动跳转到之前打开的页面。
主要介绍了Spring Security如何使用URL地址进行权限控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Spring Security三份资料,实战Spring Security 3.x.pdf;Spring Security 3.pdf;Spring Security使用手册.pdf
Spring Security 演讲PPT(演讲嘉宾:张明星) WebSphere技术专家沙龙在广州圆满举办,WSC超级版主Fastzch(张明星)担任本次沙龙的演讲嘉宾,他给广州的WebSphere技术专家带来了以“Spring Security ”为主题的...
spring security spring security 中文文档
springsecurity是一个专注于为Java应用程序提供身份验证和授权的框架。与所有Spring项目一样,Spring安全性的真正威力在于它可以很容易地扩展以满足定制需求。 spring security 的核心功能主要包括: 认证 (你是...
Spring Security in Action
Spring Security:spring家族一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...
spring security4登陆
SpringSecurity框架的权限认证流程原理,请求到来时SpringSecurity如果调用层层过滤器来完成认证;
自己在网络上看到并整理成CHM版本的。 原地址:http://www.family168.com/tutorial/springsecurity/html/springsecurity.html
该资源是基本Spring Security实战七篇文档中组织的源码,详情如下: ssecurity项目是Spring Security实战(一和二)的源码; ssecurity-db项目是Spring Security实战(三)的源码; ssceurity-page项目是Spring ...
小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。 一般Web应用的需要进行认证和授权。 认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户 授权:经过认证后...
三更springsecurity学习笔记
项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis...
Spring Security 3.pdf Spring Security 3.pdf Spring Security 3.pdf Spring Security 3.pdf
SpringSecurity学习总结源代码
1.本项目为SpringCloud Gateway的微服务框架,整合了SpringSecurity,微服务间使用Redis来获取登陆的用户信息。 2.由于Gat
SpringSecurity入门到进阶到高级,是我们老师给我们讲课用的,我们都照着配就没有问题,可以跑通,
Spring Security。 官网 Spring Security API(Spring Security 开发文档).CHM