- 浏览: 7873527 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
由于种种关系,虽然spring security 3出了很久了,但还是项目中只能用
spring security 2,发现spring security 2真是十分多东西了,
其中比如象在struts2中和轻易写的session管理等,在spring security 2中都要
仔细研究文档,花点心思,这里首先推荐两篇网上为数不多的spring security2
的中文文档给大家学习,还有代码,先看这两篇:
http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html
http://www.blogjava.net/redhatlinux/archive/2008/09/01/226010.html
然后看完这两篇后,就可以开始吧。首先要解决的问题,是如何登录后,保存用户的session,其实这个可以
替换掉spring security 2中的authenticationProcessingFilter。
先来看下application-security.xml的配置文件,注意本文说的依然是2的配置
首先是开始部分:
<ss:http auto-config="false" access-denied-page="/common/403.jsp" entry-point-ref="authenticationProcessingFilterEntryPoint">
注意,这里要把auto-config设置为false,并且同时要删除原先的:
再来看下这个插入点:
接下来,建立自定义的类MyAuthenticationProcessingFilter,代码如下:
可以看到,继承了AuthenticationProcessingFilter就可以了,在
onSuccessfulAuthentication方法中,可以进行session的保存了!
接下来要在配置文件中进行配置,注册替换掉原来的,如下:
可以看到,其实就是我们自定义的过滤器,摆放在spring security 2中的
AUTHENTICATION_PROCESSING_FILTER前面了;
这样,我们就完成了第一个功能,可以在spring security 2中试用session了!
2) 显示没有权限的页面
当没有权限的页面时,一般的显示方法是
<ss:http auto-config="false" access-denied-page="/common/403.jsp">
但又有资料说到,如果要动态,不用一个固定的403.jsp的话,可以自定义
access-denied-handler,于是实验了下,用的是spring 2.5+spring security 2.0.4,
但很遗憾,<bean id="accessDeniedHandler" class="org.springframework.security.ui.AccessDeniedHandlerImpl">
这里尽管用了自定义的类,依然不起效果,依然出现access denied的页面,
没办法,只好依然用access-denied-page="/common/403.jsp">,只不过
在403.jsp中,用一个重定向,就可以重新定向到比如struts2.action去自由发挥拉
3 session超时
spring security 3中提供了相关的配置设置,但可惜2中没有,
只有继续动手,首先,要在web.xml中,将自定义的filter放在spring security 2的
fiter前,比如
然后代码中:
这里要判断,如果加载的不是login.action或者加载的不是.action结尾的(比如一些资源文件等)的,就要判断其中session是否null了,null的话跳转,
总体来说,功能就实现了
是的,这里是简单例子说明而已
spring security 2,发现spring security 2真是十分多东西了,
其中比如象在struts2中和轻易写的session管理等,在spring security 2中都要
仔细研究文档,花点心思,这里首先推荐两篇网上为数不多的spring security2
的中文文档给大家学习,还有代码,先看这两篇:
http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html
http://www.blogjava.net/redhatlinux/archive/2008/09/01/226010.html
然后看完这两篇后,就可以开始吧。首先要解决的问题,是如何登录后,保存用户的session,其实这个可以
替换掉spring security 2中的authenticationProcessingFilter。
先来看下application-security.xml的配置文件,注意本文说的依然是2的配置
首先是开始部分:
<ss:http auto-config="false" access-denied-page="/common/403.jsp" entry-point-ref="authenticationProcessingFilterEntryPoint">
注意,这里要把auto-config设置为false,并且同时要删除原先的:
<ss:form-login login-page="/login.action" authentication-failure-url="/login.action?error=true" default-target-url="/" always-use-default-target="true" />
再来看下这个插入点:
<bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"> <property name="loginFormUrl" value="/login.action" /> <property name="forceHttps" value="false" /> </bean>
接下来,建立自定义的类MyAuthenticationProcessingFilter,代码如下:
ublic class MyAuthenticationProcessingFilter extends AuthenticationProcessingFilter { protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) throws IOException { super.onSuccessfulAuthentication(request, response, authResult); Object obj = SecurityContextHolder.getContext().getAuthentication() .getPrincipal(); if (obj instanceof UserDetails) { userId = ((UserInfo) obj).getUserid(); username= ((UserInfo) obj).getUsername(); } request.getSession().setAttribute("userId", userId); }
可以看到,继承了AuthenticationProcessingFilter就可以了,在
onSuccessfulAuthentication方法中,可以进行session的保存了!
接下来要在配置文件中进行配置,注册替换掉原来的,如下:
<ss:logout logout-success-url="/login.action" /> <ss:authentication-manager alias="authenticationManager" /> <bean id="authenticationProcessingFilter" class="com.liao.security.MyAuthenticationProcessingFilter"> <ss:custom-filter before="AUTHENTICATION_PROCESSING_FILTER" /> <property name="defaultTargetUrl" value="/" /> <property name="filterProcessesUrl" value="/j_spring_security_check" /> <property name="authenticationFailureUrl" value="/login.action?error=true" /> <property name="authenticationManager" ref="authenticationManager" /> </bean>
可以看到,其实就是我们自定义的过滤器,摆放在spring security 2中的
AUTHENTICATION_PROCESSING_FILTER前面了;
这样,我们就完成了第一个功能,可以在spring security 2中试用session了!
2) 显示没有权限的页面
当没有权限的页面时,一般的显示方法是
<ss:http auto-config="false" access-denied-page="/common/403.jsp">
但又有资料说到,如果要动态,不用一个固定的403.jsp的话,可以自定义
access-denied-handler,于是实验了下,用的是spring 2.5+spring security 2.0.4,
<bean id="exceptionTranslationFilter" class="org.springframework.security.ui.ExceptionTranslationFilter"> <property name="accessDeniedHandler" ref="accessDeniedHandler" /> <property name="authenticationEntryPoint" ref="authenticationProcessingFilterEntryPoint" /> </bean> <!-- 处理AccessDeniedException --> <bean id="accessDeniedHandler" class="org.springframework.security.ui.AccessDeniedHandlerImpl"> <property name="errorPage" value="/common/403.jsp" /> </bean>
但很遗憾,<bean id="accessDeniedHandler" class="org.springframework.security.ui.AccessDeniedHandlerImpl">
这里尽管用了自定义的类,依然不起效果,依然出现access denied的页面,
没办法,只好依然用access-denied-page="/common/403.jsp">,只不过
在403.jsp中,用一个重定向,就可以重新定向到比如struts2.action去自由发挥拉
3 session超时
spring security 3中提供了相关的配置设置,但可惜2中没有,
只有继续动手,首先,要在web.xml中,将自定义的filter放在spring security 2的
fiter前,比如
<filter> <filter-name>SessionTimeoutFilter</filter-name> <filter-class>com.liao.security.SessionTimeoutFilter</filter-class> </filter> <filter-mapping> <filter-name>SessionTimeoutFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
然后代码中:
public class SessionTimeoutFilter implements Filter { private String str; public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest servletRequest = (HttpServletRequest) request; HttpServletResponse servletResponse = (HttpServletResponse) response; HttpSession session = servletRequest.getSession(); String url = servletRequest.getRequestURI(); String path = url.substring(url.lastIndexOf("/")); if (path.indexOf("login.action") == -1 && path.indexOf(".action") != -1) { if (session.getAttribute("userId") == null) { str = "<script language='javascript'>alert('登录超时,请重新登录');" + "window.top.location.href="+"'"+servletRequest.getContextPath()+"/login.action"+"';"+ "</script>"; response.setContentType("text/html;charset=UTF-8");// 解决中文乱码 try { PrintWriter writer = response.getWriter(); writer.write(str); writer.flush(); writer.close(); } catch (Exception e) { } } else { chain.doFilter(request, response); } } else { chain.doFilter(request, response); } }
这里要判断,如果加载的不是login.action或者加载的不是.action结尾的(比如一些资源文件等)的,就要判断其中session是否null了,null的话跳转,
总体来说,功能就实现了
评论
3 楼
newposte
2012-09-19
请问楼主:我项目中使用spring为2.5.6,spring security为2.0.5,但是使用access-denied-page="/common/403.jsp"> 该属性不起作用,当无权限时并不能跳转到403.jsp,请问这个是为什么?
2 楼
jackyrong
2012-07-10
jyjava 写道
lz,你的session可能就是servlet里面的session,但是项目中session一般都是伴随权限来用的,
是的,这里是简单例子说明而已
1 楼
jyjava
2012-07-10
lz,你的session可能就是servlet里面的session,但是项目中session一般都是伴随权限来用的,
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1504方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 1981前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3426info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2198import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 459https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 644public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 567https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 633https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 409https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 4721 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3054微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 573https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1794什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 926本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1287原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 821public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 633在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 895-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 724一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1867介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
SpringSeurity三更笔记
狂神(秦疆)springboot web开发中的springsecurity素材 对应B站视频的P34
Spring Security三份资料,实战Spring Security 3.x.pdf;Spring Security 3.pdf;Spring Security使用手册.pdf
一个简单的spring-security demo,
三更springsecurity学习笔记
同时支持基于客户端证书和表单登录的认证,详细参考http://blog.csdn.net/xiejx618/article/details/51691809
计算机安全问题的阐述,写得很好的一篇论文
Java seurity (in a nutshell).ppt
NULL 博文链接:https://clongjava.iteye.com/blog/1453648
it deal with network security in terms of hacker
SIM -Seurity信息管理-在中央位置收集日志 SEM-安全事件管理-分析日志以进行事件监视,关联和规则创建等 它是一个单一的软件系统,可帮助自动执行汇总,解析和规范化日志的过程 将日志加载到SIEM软件中后,将自动...