- 浏览: 88974 次
- 性别:
- 来自: 厦门
最新评论
-
zhengyong7232:
SELECT t.province,DECODE(landsc ...
列转行 -
meepo3927:
不是特么很懂
列转行
由于种种关系,虽然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的配置
首先是开始部分:
注意,这里要把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的话跳转,
总体来说,功能就实现了
转载于:http://jackyrong.iteye.com/blog/1584303
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的配置
首先是开始部分:
注意,这里要把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的话跳转,
总体来说,功能就实现了
转载于:http://jackyrong.iteye.com/blog/1584303
发表评论
-
最小生成树之Kruskal算法
2013-12-15 00:54 1086这篇文章实现最小生成树的Kruskal算法Kruskal算 ... -
排序算法--插入排序
2013-12-15 00:47 1064插入排序原理:假设 ... -
poi创建下拉框
2013-04-16 19:01 0package finance.tools.salesper ... -
Spring中Transactional配置
2013-04-11 20:43 1001Spring中Transactional配置 标签: 杂谈 分 ... -
Hibernate将Enum枚举类型映射为Int类型 .
2013-04-09 16:46 1537最近要用Hibernate做一个枚举类型的映射,在MySQL ... -
Hibernate 更灵活的用法 HibernateCallback
2013-01-22 14:41 1432在项目中用Hibernate的DetachedCriter ... -
spring源代码分析(2)--BeanFactory
2013-01-20 12:38 1430我们首先来看下BeanFacroty接口 pa ... -
spring源代码分析(1)--Resource的分析
2013-01-20 12:22 4043我们知道,在spring中,配置文件是通过资源形式加载的, ... -
DefaultListableBeanFactory研究
2013-01-18 10:49 5907DefaultSingletonBeanRegistry完 ... -
jvm的内存调优
2013-01-11 15:54 8621) 堆 运行时数 ... -
struts2中Action的name 和package的name和namespace是什么作用
2013-01-02 12:16 9635在struts2的 struts.xml 配置中 例: ... -
深入探索 高效的Java异常处理框架
2012-10-22 14:09 913摘要:本文从Java异常最基本的概念、语法开始讲述了Java异 ... -
JAVA对ArrayList排序
2012-10-16 21:53 16519java如何对ArrayList中对象按照该对象某属性排序 ... -
ThreadPoolExecutor使用和思考(中)-keepAliveTime及拒绝策略
2012-09-11 00:48 956工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
2012-09-11 00:45 1651工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
Spring IOC之BeanFactory
2012-09-10 12:39 1311BeanFactory ,作为 Spring 基础的 IoC ... -
Java5 并发学习
2012-09-10 11:33 819在Java5之后 ... -
Spring对事务管理的支持的发展历程(基础篇
2012-08-31 17:43 939Connection conn = DataS ... -
CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar .
2012-08-31 16:54 1655import javax.xml.datatype.Datat ... -
《Spring技术内幕》学习笔记10——Web环境中Spring的启动过程
2012-07-30 09:04 10021.Spring 不但可以在 JavaSE 环境中应用,在 W ...
相关推荐
例如,`HttpSessionAuthenticationFilter`处理基于session的身份验证,`AnonymousAuthenticationFilter`为未认证用户提供匿名身份。 2. **安全性元数据**:Spring Security通过安全元数据来定义哪些资源需要保护,...
在SpringBoot Web开发中,SpringSecurity扮演着核心角色,负责处理身份验证、授权以及访问控制等方面的安全需求。狂神(秦疆)的教程以SpringBoot为基础,深入讲解了如何集成和使用SpringSecurity来构建安全的Web...
这三份资料——"实战Spring Security 3.x.pdf"、"Spring Security 3.pdf" 和 "Spring Security使用手册.pdf" 将深入探讨这些概念,并提供实践指导,帮助读者掌握如何在实际项目中应用Spring Security。通过学习这些...
在这个项目中,我们可以深入学习如何使用Spring Security来实现用户认证、权限控制以及安全相关的功能。 首先,Spring Security的核心组件包括: 1. **Filter Security Chain**: 这是一系列的过滤器,它们在HTTP...
7. **OAuth2 and JWT支持**:Spring Security 提供了对OAuth2和JSON Web Tokens (JWT) 的支持,这在现代微服务架构中非常重要,因为它允许第三方应用安全地与你的服务进行交互。 8. **表达式语言(SpEL)**:Spring...
在"Spring Security双模认证"中,我们关注的是同时支持基于客户端证书和表单登录的两种认证方式。 1. **客户端证书认证**: 客户端证书认证是一种安全的网络身份验证方法,它使用X.509数字证书来确认用户身份。在...
2. `AuthenticationManager`处理凭证,尝试找到对应的`UserDetails`对象。 3. 如果认证成功,Spring Security创建一个`Authentication`对象并存储在Security Context中。 4. 接下来的请求会被安全拦截器检查,判断...
计算机安全问题的阐述,写得很好的一篇论文
Java seurity (in a nutshell).ppt
it deal with network security in terms of hacker
SIM -Seurity信息管理-在中央位置收集日志 SEM-安全事件管理-分析日志以进行事件监视,关联和规则创建等 它是一个单一的软件系统,可帮助自动执行汇总,解析和规范化日志的过程 将日志加载到SIEM软件中后,将自动...