spring security| 耗时:0.242秒|11931条结果

Spring security

web.xml文件中加入Filter声明 <!-- Spring security Filter --> <filter> <filter-name>springSecurityFilterChain</filter-name> <
http://www.itnose.net/detail/6635372.html 2016-09-01 08:35   [J2SE]

spring security

     哪位高手有spring security 的jar包没,如有麻烦给我发一下。邮箱:zyyqsyb@163.com. 回复讨论(解决方案) 我有spring security2  
http://www.itnose.net/detail/948788.html 2014-03-02 00:06   [J2EE]

spring security的问题

本帖最后由 zyb_8022 于 2011-03-03 11:31:02 编辑 我初学spring security,配置了简单的xml <http auto-config='true'>      <
http://www.itnose.net/detail/845293.html 2014-02-21 20:44   [J2EE]

[spring security] spring security 4 基础

;/spring.version>       <spring-security.version>4.0.3.RELEASE</spring-security.version>    
http://www.itnose.net/detail/6465034.html 2016-03-08 10:27   [Spring]

Spring Security 原理

文本转载自:http://www.blogjava.net/youxia/archive/2008/12/07/244883.html 在SpringSide 3的官方文档中,说安全框架使用的是Spring Security 2.0。乍一看,吓了我一跳,以为Acegi这么快就被淘汰了呢。上搜索引擎一搜,发现原来Spring Security 2.0就是Acegi 2.0。悬着的心放下来了。虽然SpringSide 3中关于Acegi的配置文件看起来很不熟悉,但是读了Acegi 2.0的官方文档后,一切都释然了。 先来谈一谈Acegi的基础知识,Acegi的架构比较复杂,但是我希望我下面的只言片语能够把它说清楚。大家都知道,如果要对Web资源进行保护,最好的办法莫过于Filter,要想对方法调用进行保护,最好的办法莫过于AOP。Acegi对Web资源的保护,就是靠Filter实现的。如下图: 一般来说,我们的Filter都是配置在web.xml中,但是Acegi不一样,它在web.xml中配置的只是一个代理,而真正起作用的Filter是作为Bean配置在Spring中的。web.xml中的代理依次调用这些Bean,就实现了对Web资源的保护,同时这些Filter作为Bean被Spring管理,所以实现AOP也很简单,真的是一举两得啊。 Acegi中提供的Filter不少,有十多个,一个一个学起来比较复杂。但是对于我们Web开发者来说,常用的就那么几个,如下图中的被红圈圈标记出来的: 从上到下,它们实现的功能依次是1、制定必须为https连接;2、从Session中提取用户的认证信息;3、退出登录;4、登录;5、记住用户;6、所有的应用必须配置这个Filter。 一般来说,我们写Web应用只需要熟悉这几个Filter就可以了,如果不需要https连接,连第一个也不用熟悉。但是有人肯定会想,这些Filter怎么和我的数据库联系起来呢?不用着急,这些Filter并不直接处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器和决策管理器。如下图: 对于这两种管理器,那也是不需要我们写代码的,Acegi也提供了现成的类。那么大家又奇怪了:又是现成的,那怎么和我的数据库关联起来呢?别着急,其实这两个管理器自己也不做事,认证管理器把任务交给了Provider,而决策管理器则把任务交给了Voter,如下图: 现在我要告诉你们,这里的Provider和Voter也是不需要我们写代码的。不要崩溃,快到目标了。Acegi提供了多个Provider的实现类,如果我们想用数据库来储存用户的认证数据,那么我们就选择DaoAuthenticationProvider。对于Voter,我们一般选择RoleVoter就够用了,它会根据我们配置文件中的设置来决定是否允许某一个用户访问制定的Web资源。 而DaoAuthenticationProvider也是不直接操作数据库的,它把任务委托给了UserDetailService,如下图: 而我们要做的,就是实现这个UserDetailService。图画得不好,大家不要见笑,但是说了这么多总算是引出了我们开发中的关键,那就是我们要实现自己的UserDetailService,它就是连接我们的数据库和Acegi的桥梁。UserDetailService的要求也很简单,只需要一个返回org.springframework.security.userdetails.User对象的loadUserByUsername(String userName)方法。因此,怎么设计数据库都可以,不管我们是用一个表还是两个表还是三个表,也不管我们是用户-授权,还是用户-角色-授权,还是用户-用户组-角色-授权,这些具体的东西Acegi统统不关心,它只关心返回的那个User对象,至于怎么从数据库中读取数据,那就是我们自己的事了。 反过来再看看上面的过程,我们发现,即使我们要做的只是实现自己的UserDetailService类,但是我们不得不在Spring中配置那一大堆的Bean,包括几个Filter,几个Manager,几个Provider和Voter,而这些配置往往都是重复的无谓的。好在Acegi 2.0也认识到了这个问题,所以,它设计了一个<http>标签,让Acegi的配置得到了简化。下面是SpringSide 3中的配置的截图,大家可以看看: 下图是官方文章中的传统Filter设置和<http>元素之间的对应关系: 下面的代码是SpringSide 3中实现UserDetailService的范例,在SpringSide 3的范例中,白衣使用了三个表User、Role、Authority。但是Acegi不关心你用了几个表,它只关心UserDetails对象。而决定用户能否访问指定Web资源的,是RoleVoter类,无需任何修改它可以工作得很好,唯一的缺点是它只认ROLE_前缀,所以搞得白衣的Authority看起来都象角色,不伦不类。 package  personal.youxia.service.security; import  java.util.ArrayList; import  java.util.List; import  org.springframework.beans.factory.annotation.Required; import  org.springframework.dao.DataAccessException; import  org.springframework.security.GrantedAuthority; import  org.springframework.security.GrantedAuthorityImpl; import  org.springframework.security.userdetails.UserDetails; import  org.springframework.security.userdetails.UserDetailsService; import  org.springframework.security.userdetails.UsernameNotFoundException; import  personal.youxia.entity.user.Authority; import  personal.youxia.entity.user.Role; import  personal.youxia.entity.user.User; import  personal.youxia.service.user.UserManager; /**   * 实现SpringSecurity的UserDetailsService接口,获取用户Detail信息.  *   *   @author   calvin    */  public    class  UserDetailServiceImpl   implements  UserDetailsService {       private  UserManager userManager;       public  UserDetails loadUserByUsername(String userName)   throws  UsernameNotFoundException, DataAccessException {         User user  =  userManager.getUserByLoginName(userName);           if  (user  ==    null )               throw    new  UsernameNotFoundException(userName  +   "  不存在 " );         List < GrantedAuthority >  authsList  =    new  ArrayList < GrantedAuthority > ();           for  (Role role : user.getRoles()) {               for  (Authority authority : role.getAuths()) {                 authsList.add(  new  GrantedAuthorityImpl(authority.getName()));             }         }           //   目前在MultiDatabaseExample的User类中没有enabled, accountNonExpired,credentialsNonExpired, accountNonLocked等属性           //   暂时全部设为true,在需要时才添加这些属性.          org.springframework.security.userdetails.User userdetail  =    new  org.springframework.security.userdetails.User(                 user.getLoginName(), user.getPassword(),   true ,   true ,   true ,   true , authsList                         .toArray(  new  GrantedAuthority[authsList.size()]));           return  userdetail;     }     @Required       public    void  setUserManager(UserManager userManager) {           this .userManager  =  userManager;     } } 最后再来说说这个命名的问题,我对Authentication和Authority这两个单词比较反感,两个原因,一是因为它们太生僻了,二是因为它们长得太像了,明明一个是认证,一个是授权,意思相差很远,外貌却如此相似,确实很烦人。如果让我来选择,我喜欢Privilege这个单词,在我刚使用MySQL的时候就跟它很熟了,所以在我的项目中,我可能会用Privilege来代替Authority。如果我们只使用User-Role两级关系,使用RoleVoter默认的ROLE_前缀当然没有关系,如果是像白衣这样是用三层关系,最好还是把这个前缀改一改,以免混淆。
http://www.itnose.net/detail/6689684.html 2016-12-16 16:12   [Spring]

Spring Security教程

Spring Security是一个灵活和强大的身份验证和访问控制框架,以确保基于Spring的Java Web应用程序的安全。 在这些简单Spring Security4 一系列教程中的 Spring Security 示例是
http://www.itnose.net/detail/6634409.html 2016-08-30 11:54   [Spring]

Spring Security Filter 分析

 Spring  Security是基于Filter实现,在Servlet前执行,所有一切为执行一系列的Filter。         1、DelegatingFilterProxy DelegatingFilterProxy提供一个web.xml与application context的连接,把web.xml请求连接至FilterChainProxy进行处理,FilterChainProxy在Spring Context进行定义,能最大化应用Spring配置优势。         2、FilterChainProxy FilterChainProxy中定义一系列按照顺序执行的Filter。 UsernamePasswordAuthenticationFilter RememberMeAuthenticationFilter AnonymousAuthenticationFilter ExceptionTranslationFilter FilterSecurityInterceptor 每个Filter需要关联主要对象为AuthenticationManager、SecurityContextHolder、Authentication、AccessDecisionManager(本例暂不关注)。 3、UsernamePasswordAuthenticationFilter 本Filter仅有于登录。默认绑定登录的url为"/login"(可自定义),则request url为绑定值,才执行本Filter。登录成功则委托AuthenticationSuccessHandler执行,并生成Authentication,保存至SecurityContextHolder.getContext()中,执行后续Filter;如果失败则委托AuthenticationFailureHandler执行,清理session与cache,不执行后续Filter了。 UsernamePasswordAuthenticationFilter继承于AbstractAuthenticationProcessingFilter 4、RememberMeAuthenticationFilter 本Filter紧跟UsernamePasswordAuthenticationFilter,用于进行登录后的基于token的认证,如果认证成功则生成Authentication,保存至SecurityContextHolder.getContext()中。 5、AnonymousAuthenticationFilter          在UsernamePasswordAuthenticationFilter和RememberMeAuthenticationFilter中都不通过,未生成Authentication,AnonymousAuthenticationFilter则生成一个匿名用户的Authentication,并保存到securityContextHolder.getContext()中,为后续Filter提供Authentication。 6、ExceptionTranslationFilter 本Filter不做任何Authentication和Authorization的工作,只是解析Exception,做出相应的动作。本Filter先执行FilterSecurityInterceptor的过滤,捕捉异常和收集异常,如果为Authentication异常则委托AuthenticationEntryPoint去处理;如果为Authorization异常且用户不是匿名用户,则委托AccessDeniedHandler去处理;如果用户为匿名用户(Anonymous),且异常为Authorization异常,也委托AuthenticationEntryPoint去处理。 7、FilterSecurityInterceptor         大概是进行Authorization的Filter,待详。 8、AuthenticationManager 顾名思义,AuthenticationManager认证的管理器,提供多个AuthenticationProvider,本例就使用默认的DaoAuthenticationProvider。         9、AuthenticationEntryPoint 本接口只有一个方法,认证失败后执行。本例就实现该接口,实现认证失败后,返回Json字符串而不是跳转至登录页面。        10、AccessDeniedHandler 本接口只有一个方法,权限验证失败后执行。本例就实现该接口,实现权限不足时,返回Json字符串而不是返回403错误。 11、AuthenticationFailureHandler          本接口只有一个方法,登录验证失败后执行。本例就实现该接口,登录验证失败后,返回Json字符串而不是跳整到登录页面。 12、AuthenticationSuccessHandler     本接口只有一个方法,登录验证成功后执行。本例就实现该接口,登录验证成功后,返回Json字符串而不是跳整到默认页面或上一页面。
http://www.itnose.net/detail/6618124.html 2016-08-03 17:02   [Spring]

Spring Security 4.1.1 发布

Spring Security 4.1.1 发布了,Spring Security 的前身是Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。 Spring Security  为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE
http://www.itnose.net/detail/6529433.html 2016-07-08 16:04   [Spring]

Spring Security介绍

  这里提到的Spring Security也就是被大家广为熟悉的Acegi Security,2007年底AcegiSecurity正式成为Spring Portfolio项目,并更名为Spring Security.SpringSecurity是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了SpringIoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。     通过在许多项目中实践应用以及社区的贡献,如今的Spring Security已经成为Spring Framework下最成熟的安全系统,它为我们提供了强大而灵活的企业级安全服务,如:     Ø         认证授权机制     Ø          Web资源访问控制     Ø         业务方法调用访问控制     Ø         领域对象访问控制Access Control List(ACL)     Ø         单点登录(Central Authentication Service)     Ø         X509认证     Ø         信道安全(Channel Security)管理等功能     当保护Web资源时,Spring Security使用Servlet 过滤器来拦截Http请求进行身份验证并强制安全性,以确保WEB资源被安全的访问。如下图是Spring Security的主要组件图(摘自《Spring in Action》):     图1 Spring Security的基本组件     无论是保护WEB资源还是保护业务方法或者领域对象,SpringSecurity都的通过上图中的组件来完成的。本文主要阐述如何使用SpringSecurity对WEB应用程序的资源进行安全访问控制,并通过一个简单的实例来对SpringSecurity提供的各种过滤器的功能和配置方法进行描述。        Spring Security是一种为基于Spring的应用程序提供说明性安全保护的安全框架。它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权。在Spring Framework基础上,Spring Security充分利用了依赖注入(DI,Dependency Injection)和面向切面技术。 1.1 安全拦截器         工作了一整天,当你回到家时,需要打开家门上的锁。而为了打开那个锁,你必须先将一把钥匙插到锁孔中,并恰当地拨动锁的制动栓,以打开弹簧锁。如果钥匙和锁不匹配,就无法拨动制动栓,而弹簧锁也就不会被打开。但是如果你有正确的钥匙,那么所有的制动栓就都会接受这把钥匙,弹簧锁就会被打开,从而允许你把门打开。 在Spring Security中,安全拦截器可以被看作是一把弹簧锁,能够阻止对应用程序中受保护资源的访问。为了弹开弹簧锁,从而通过安全拦截器,你必须向系统提供“钥匙”(通常是一对用户名和密码)。该“钥匙”接着会尝试拨开安全拦截器的“制动栓”,从而允许你访问受保护的资源。 安全拦截器的实际实施将取决于所要保护的资源。如果读者正要在某个Web应用程序中保护一个URL,那么相应的安全拦截器将被当做一个servlet过滤器来实施。但是如果你正要保护某个方法调用,那么切面将被用来加强安全性。读者将会在本章稍后部分看到安全拦截器的这两种形式。 除了通过拦截对资源的访问来加强安全性之外,安全拦截器几乎无所事事。它并不实际应用安全规则。相反,它把该职责委托给图7.1底部所示的各种管理器。下面让我们从认证管理器开始,逐个看一下这些管理器。 1.2 认证管理器 第一道必须打开的安全拦截器的制动栓就是认证管理器。认证管理器负责辨认你是谁。它是通过考虑你的主体(通常是一个用户名)和你的凭证(通常是一个密码)做到这点的。 你的主体定义了你是谁,而你的凭证则是确认你身份的证据。如果你的凭证足以使认证管理器相信你的主体可以标识你的身份,那么Spring Security就能知道它是在和谁打交道了。 如同Spring Security的其余部分(以及Spring本身)一样,认证管理器也是一个基于接口的可插入组件。这使得它有可能与几乎所有你能想象到的认证机制一起使用Spring Security。在本章稍后你将看到,Spring Security带有少数灵活的认证管理器,它们包括绝大多数常见的认证策略。 1.3 访问决策管理器 一旦Spring Security确定了你是谁,它就必须决定你是否对受保护的资源拥有访问授权。访问决策管理器是Spring Security锁中第二道必须被打开的制动栓。访问决策管理器执行授权,它考虑你的身份认证信息和与受保护资源关联的安全属性来决定是否让你进入。 举例来说,安全规则也许规定只有主管才允许访问某个受保护的资源。而如果你被授予了主管权限,那么第二道也是最后一道制动栓——访问决策管理器——就会被打开,并且安全拦截器将会给你让路,让你取得对受保护资源的访问权。 就像认证管理器一样,访问决策管理器也是可插入的。在本章稍后部分,我们将更进一步研究Spring Security所带的访问决策管理器。 1.4 运行身份管理器 如果你已经通过了认证管理器和访问决策管理器,那么安全拦截器就会被开启,门也就可以被打开了。但是在你转动门把手进去之前,安全拦截器可能还有一件事要做。 即使你已经通过身份认证并且已经获得了访问某一资源的授权,门后也许还有更多的安全限制在等着你。举例来说,你也许已被授权查看某一Web页面,但是用于创建该页面的对象可能有着与这一Web页面本身不同的安全要求。运行身份管理器可以用来使用另一个身份替换你的身份,从而允许你访问应用程序内部更深处的受保护对象。 注意,并不是所有应用程序都会需要身份替换。因此,运行身份管理器是一个可选的安全组件,在许多受Spring Security保护的应用程序中并不需要运行身份管理器。 1.5 调用后管理器        Spring Security的调用后管理器与其他安全管理器组件略有不同。其他安全管理器组件在受保护资源被访问之前实施某种形式的安全措施强制执行,而调用后管理器则是在受保护资源被访问之后执行安全措施。 调用后管理器有点类似于在某些折扣商店和家用电器商店出口处等着检查购物收据的人。他们这样做的目的是确保你拥有从商店里搬走那些值钱物品的适当权利。不过,调用后管理器是确保你被允许查看那些受保护资源返回的数据,而不是确保你被允许从商店搬走大屏幕电视。 如果调用后管理器建议一个服务层Bean,那么它便将有机会检查从所建议方法返回的值。接下来,它可以决定当前用户是否被允许查看返回的对象。该调用后管理器还可以修改所返回的值,以确保当前用户只能够访问返回对象的特定属性。 与运行身份管理器类似,并不是所有应用程序都会需要调用后管理器。你只会在你的应用程序的安全方案要求访问被限制在每个实例基础上的定义域水平时需要调用后管理器。 现在,你已经看到了Spring Security的全貌,我们就可以为RoadRantz应用程序配置Spring Security了。对我们来说,我们将不需要运行身份管理器或调用后管理器,因此我们将把那两个组件放到后面的高级Spring Security主题中。下面,让我们首先从配置认证管理器开始。
http://www.itnose.net/detail/6436988.html 2016-01-13 16:58   [Spring]

spring安全框架Security(二)

好,我们往下看,接着就是应用我们实际项目里的自定义用户权限了     Java代码  <security:authentication-manager>        <security:authentication-provider user-service-ref="customUserDetailsService">            <security:password-encoder ref="passwordEncoder" />        </security:authentication-provider>   </security:authentication-manager>          <!-- 对密码进行MD5编码 -->   <bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" />   <bean id="customUserDetailsService" class="org.yzsoft.springmvcdemo.util.CustomUserDetailsService" />   首先是<security:authentication-manager>是指定我们自定义的身份验证策略,这里我们用customUserDetailsService这个bean,就是指向我们CustomUserDetailsService.java这个类。然后<security:password-encoder>指定我们密码使用MD5进行编码,调用Spring Security自带的MD5加密类。当然,还有加盐MD5或我们自己写的加密算法等安全性更加高的密码策略。这个按项目实际使用配置吧。 然后看到我们的CustomUserDetailsService.java     Java代码  package org.yzsoft.springmvcdemo.util;      import java.util.ArrayList;   import java.util.Collection;   import java.util.List;      import org.apache.log4j.Logger;   import org.springframework.beans.factory.annotation.Autowired;   import org.springframework.dao.DataAccessException;   import org.springframework.security.core.GrantedAuthority;   import org.springframework.security.core.authority.GrantedAuthorityImpl;   import org.springframework.security.core.userdetails.User;   import org.springframework.security.core.userdetails.UserDetails;   import org.springframework.security.core.userdetails.UserDetailsService;   import org.springframework.security.core.userdetails.UsernameNotFoundException;   import org.yzsoft.springmvcdemo.serviceimpl.UsersServiceImpl;   import org.yzsoft.springmvcdemo.vo.TUsers;      /**   * 一个自定义的类用来和数据库进行操作. 即以后我们要通过数据库保存权限.则需要我们继承UserDetailsService   *    * @author    *    */   public class CustomUserDetailsService implements UserDetailsService {          protected static Logger logger = Logger.getLogger("service");//log4j,不用解释了吧。。       @Autowired       private UsersServiceImpl usersService;          public UsersServiceImpl getUsersService() {           return usersService;       }          public void setUsersService(UsersServiceImpl usersService) {           this.usersService = usersService;       }          public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {              UserDetails user = null;              try {                  // 搜索数据库以匹配用户登录名.               // 我们可以通过dao使用Hibernate来访问数据库               System.out.println(username + "   用户页面输入的用户名");               TUsers tusers = this.usersService.findByUsername(username);               System.out.println(tusers.getUsername() + "   数据库取出的用户名");               // Populate the Spring User object with details from the dbUser               // Here we just pass the username, password, and access level               // getAuthorities() will translate the access level to the correct               // role type               // 用户名、密码、是否启用、是否被锁定、是否过期、权限               user = new User(tusers.getUsername(), tusers.getPassword().toLowerCase(), true, true, true, true, getAuthorities(Integer.parseInt(tusers.getRole())));                                           } catch (Exception e) {               logger.error("用户信息错误!");               throw new UsernameNotFoundException("异常处理:检索用户信息未通过!");           }                       return user;       }          /**       * 获得访问角色权限列表       *        * @param access       * @return       */       public Collection<GrantedAuthority> getAuthorities(Integer role) {           System.out.println("取得的权限是  :" + role);           List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();              // 所有的用户默认拥有ROLE_USER权限           if (role == 0) {               System.out.println("普通用户");               logger.debug("取得普通用户权限-->");               authList.add(new GrantedAuthorityImpl("ROLE_USERS"));           }           // 如果参数role为1.则拥有ROLE_ADMIN权限           if (role == 1) {               logger.debug("取得ADMIN用户权限-->");               authList.add(new GrantedAuthorityImpl("ROLE_ADMIN"));           }           System.out.println(authList.size()+"  权限列表长度");           return authList;       }   }     这里就是把我们从数据库里面取得的用户权限和Spring Security的配置进行桥接,还记得上面配置文件里的ROLE_ADMIN吧,就是从这里来的,很奇怪的是,这个必须设置成ROLE_ 开头才有效。。郁闷。。。 这里我刚开始有一个疑惑,我们看这2句     Java代码  TUsers tusers = this.usersService.findByUsername(username);   user = new User(tusers.getUsername(), tusers.getPassword().toLowerCase(), true, true, true, true, getAuthorities(Integer.parseInt(tusers.getRole())));     这里根本不需要用户输入的密码,只要了用户名,然后直接根据用户名去取权限,就直接设置进Spring Security的User对象里面去,我不禁一身冷汗,这不相当于说有了用户名就直接去查数据库么,而且是不用密码的。。。。     但经过查看官方文档和网上的解释,这才放心,原来是这样的,Spring Security的确是直接根据用户名去查,但是查得出来的Spring Security  User对象之后,它会根据这个对象的属性值去数据库查询与这个对象匹配的数据,我们这里设置的是(用户名,密码,是否启用、是否被锁定、是否过期、权限。。。),那么如果数据库存在这个对象,就返回真,否则返回假,这样也就不用担心了,完全可靠。就是我们在前台要做好限制,不能给用户不输密码就访问, 不然挤爆你数据库连接。。。。。     最后登陆页面index.jsp     Java代码  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>   <%   String path = request.getContextPath();   String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   %>      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   <html>     <head>       <base href="<%=basePath%>">              <title>My JSP 'index.jsp' starting page</title>       <meta http-equiv="pragma" content="no-cache">       <meta http-equiv="cache-control" content="no-cache">       <meta http-equiv="expires" content="0">           <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">       <meta http-equiv="description" content="This is my page">      </head>          <body>       用户登陆 <br>        ${SPRING_SECURITY_LAST_EXCEPTION.message}         <form action="j_spring_security_check" method="post">           USERNAME:<input type="text" name="j_username" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /><br/>           PASSWORD:<input type="password" name="j_password" value="" /><br/>           <input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆(这个功能没有做的)<br/>           <input type="submit">            </form>     </body>   </html>     这里我还是使用Spring Security默认的j_username和j_password,表单目标也用默认的j_spring_security_check,会默认跳到Spring Security进行拦截。其他的应该不用解释了吧。。。。     最后 ,我们整理一下Spring Security的整个控制过程:         ??>用户登陆         ??> <security:authentication-manager> 拦截         ??>交给customUserDetailsService处理,并且声明密码采用MD5策略         ??>根据输入的用户名去数据库查这条记录,验证身份         ??>取出该条记录的用户权限(锁定、禁用、过期和实际权限等)         ??>根据取得的权限列表去security:intercept-url匹配、授权,然后判断是否放行。     这就完成了一整个的权限控制流程。     接下来我们来测试一下看是否真的生效了:         1、测试匿名访问页面,直接地址栏访问:                  2、普通用户登陆                  3、然后访问后台管理页面,跳回了登陆页           4、管理员用户登陆        退出后成功跳转回登陆页,点击后退再执行其他操作,这时候session已经注销了的,不能执行,又跳回了登陆页。是我们想要的效果,OK,成功了。     好 了,Spring Security的简单使用就讲到这里,其实这只是Spring Security的一小部分,而且这里我还没有用权限表对用户权限进行专门的管理,很多东西还是用Spring Security 默认的,还有Spring Security CAS (单点登陆)以及更加高级的权限控制和更完善的Spring Security 配置,以后我们再慢慢去研究吧。发现Spring Security 这个技术不仅简化了我们的用户权限管理,要知道我们做管理系统的时候这是个大问题,也差不多颠覆了我一贯以来用户权限管理的观念,但是掌握了这种思维之 后,又发现,其实,程序并不是只有一种实现方式,它激发了我写程序时要去寻找多种解决方案的想法。学习的路上,就是要不断推翻自己固有的思维,去见识多种 新事物,才能有进步。
http://www.itnose.net/detail/6303388.html 2015-06-24 14:42   [Spring]

Spring Security概论

    1. Spring Security 是什么?     Spring Security是一个强大的和高度可定制的身份验证和访问控制框架,它的前身是 Acegi Security。     Spring Security着重于为Java应用程序提供身份验证和授权。身份验证是为用户建立一个他所声明的主体的过程(主体一般式指用户,设备或可以在你系统中执行动作的其他系统)。授权指的是一个用户能否在你的应用中执行某个操作,在到达授权判断之前,身份的主体已经由身份验证过程建立了。这些概念是通用的,并不是Spring Security特有的。     2. Spring Security特征是什么?     Spring Security具有以下特征:     全面的和可扩展的支持身份验证和授权     防止会话固定攻击,比如点击劫持,跨站请求伪造等     Servlet API 集成     与Spring Web MVC集成     3.  Spring Security支持哪些身份认证模式?         在身份验证层面,Spring Security广泛支持各种身份验证模式。 这些验证模型绝大多数都由第三方提供,或正在开发的有关标准机构提供的,例如Internet Engineering Task Force。 作为补充,Spring Security也提供了自己的一套验证功能。 Spring Security目前支持认证一体化和如下认证技术:   HTTP BASIC authentication headers (一个基于IEFT RFC的标准)   HTTP Digest authentication headers (一个基于IEFT RFC的标准)   HTTP X.509 client certificate exchange (一个基于IEFT RFC的标准)   LDAP (一个非常常见的跨平台认证需要做法,特别是在大环境)   Form-based authentication (提供简单用户接口的需求)   OpenID authentication   Computer Associates Siteminder   JA-SIG Central Authentication Service (也被称为CAS,这是一个流行的开源单点登录系统)   Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (一个Spring远程调用协议)   Automatic "remember-me" authentication (这样你可以设置一段时间,避免在一段时间内还需要重新验证)   Anonymous authentication (允许任何调用,自动假设一个特定的安全主体)   Run-as authentication (这在一个会话内使用不同安全身份的时候是非常有用的)   Java Authentication and Authorization Service (JAAS)   Container integration with JBoss, Jetty, Resin and Tomcat (这样,你可以继续使用容器管理认证,如果想的话)   Java Open Source Single Sign On (JOSSO) *   OpenNMS Network Management Platform *   AppFuse *   AndroMDA *   Mule ESB *   Direct Web Request (DWR) *   Grails *   Tapestry *   JTrac *   Jasypt *   Roller *   Elastic Plath *   Atlassian Crowd *      4. 为什么使用Spring Security?     许多独立软件供应商(ISVs, independent software vendors)采用Spring Security,是因为它拥有丰富灵活的验证模型。 这样,无论终端用户需要什么,他们都可以快速集成到系统中,不用花很多功夫,也不用让用户改变运行环境。 如果上述的验证机制都没有满足你的需要,Spring Security是一个开放的平台,编写自己的验证机制是十分简单的。 Spring Security的许多企业用户需要整合不遵循任何特定安全标准的“遗留”系统,Spring Security在这类系统上也表现的很好。     有时基本的认证是不够的。 有时你需要根据在主体和应用交互的方式来应用不同的安全措施。 比如,你可能,为了保护密码,不被监听或受到中间人攻击,希望确保请求只通过HTTPS到达。 或者,你希望确保发起请求的是一个真正的人,而不是机器人或其他自动化程序。 这对保护找回密码不被暴力攻击特别有帮助,或者让别人更难复制你程序中的关键内容。 为了帮助你实现这些目标,Spring Security支持自动“通道安全”,整合jcaptcha一体化进行人类用户检测。     Spring Security不仅提供认证功能,也提供了完备的授权功能。 在授权方面主要有三个领域,授权web请求,授权被调用方法,授权访问单个对象的实例。 为了帮你了解它们之间的区别,对照考虑授在Servlet规范web模式安全,EJB容器管理安全,和文件系统安全方面的授权方式。 Spring Security在所有这些重要领域都提供了完备的能力,我们将在这份参考指南的后面进行探讨。      5. 怎样获得Spring Security?     Spring Security是一个开源项目,我们可以通过subversion获得源代码。但大部分情况下,其实我们只需要Spring Security的jar就可以了。我们可以从 Spring Security 官网下载打包好的包,也可以从Maven中央仓库下载获得。     目前Spring Security最新的版本是4.0.0 RC1,但稳定版仍然是3.2.5。
http://www.itnose.net/detail/6215014.html 2015-02-28 14:15   [Spring]

使用 Spring Security 保护 Web 应用的安全

http://www.itnose.net/detail/6177692.html 2014-12-20 14:55   [Spring]

spring security3 错误

"-"的也解析了一次 所以就生成了两组一样的过滤器链  我也遇到了类似的问题,共同讨论一下啊 alanxiong@foxmail.com 原因可能是出现重复的过滤器链,你查看一下你spring security的配置文件 折腾了 一晚上啊 
http://www.itnose.net/detail/6132451.html 2014-10-21 12:39   [J2EE]

spring security 3.2 session问题

这个星期一直在研究spring security 3.2,基本是跑起来了。但是在配置session上有点问题,我的思路是这样的: 1. session超时出现“You session has timeout.” 2. 用户退出时出现“You've been logged out successfully.” 3. 同一个账号同时登录时出现“You has login in other browser.” 下面是配置信息: 但上面的三种情况,都会跳到“<session-management invalid-session-url="/login.do?timeout">”这个超时里,如果没有这个超时(“<session-management>”),这样就可以跳到另外两个路径上。有没有方法让这三种情况都可以出现呢? 回复讨论(解决方案) 我不知道你那是在哪里配置的,你可以参考下: web.xml <web-app xmlns="http://java.sun.com/xml/ns/javaee"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"          version="2.5">     <display-name>Test</display-name>     <context-param>         <param-name>contextConfigLocation</param-name>         <param-value>             /WEB-INF/applicationContext.xml             /WEB-INF/security.xml         </param-value>     </context-param>     ...     <!-- Security -->     <filter>         <filter-name>springSecurityFilterChain</filter-name>         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>     </filter>     <filter-mapping>         <filter-name>springSecurityFilterChain</filter-name>         <url-pattern>/*</url-pattern>     </filter-mapping>     <listener>         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>     </listener>     <listener>         <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>     </listener>     <servlet>         <servlet-name>test</servlet-name>         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>         <load-on-startup>1</load-on-startup>     </servlet>     <servlet-mapping>         <servlet-name>test</servlet-name>         <url-pattern>/</url-pattern>     </servlet-mapping>     <session-config>         <session-timeout>1</session-timeout>     </session-config> </web-app> security.xml <beans:beans xmlns="http://www.springframework.org/schema/security"              xmlns:beans="http://www.springframework.org/schema/beans"              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"              xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">     <beans:bean id="authenticationManager" class="my.package.security.AuthenticationManager" />     <beans:bean id="userDetailsDao" class="my.package.dao.UserDetailsDao" />     <http disable-url-rewriting="true" authentication-manager-ref="authenticationManager">         <intercept-url pattern="/login*" access="ROLE_ANONYMOUS" />         <intercept-url pattern="/favicon.ico" access="ROLE_ANONYMOUS" />         <intercept-url pattern="/*" access="ROLE_USER" />         <form-login login-processing-url="/authorize" login-page="/login" authentication-failure-url="/login-failed" />         <logout logout-url="/logout" logout-success-url="/login" />         <remember-me data-source-ref="dataSource" user-service-ref="userDetailsDao" />         <session-management session-authentication-strategy-ref="sas" invalid-session-url="/invalid-session" />     </http>     <beans:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl"/>     <beans:bean id="sas" class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">         <beans:constructor-arg name="sessionRegistry" ref="sessionRegistry" />         <beans:property name="maximumSessions" value="1" />     </beans:bean> </beans:beans> my.package.security.AuthenticationManager.java public class AuthenticationManager implements org.springframework.security.authentication.AuthenticationManager {     @Autowired     UserJpaDao userDao;     public Authentication authenticate(Authentication authentication) throws AuthenticationException     {         UserDetails userDetails = null;         if(authentication.getPrincipal() == null || authentication.getCredentials() == null)         {             throw new BadCredentialsException("Invalid username/password");         }         User loggedInUser = userDao.findByAlias(authentication.getName());         if(loggedInUser != null)         {             // TODO: check credentials             userDetails = new UserDetails(loggedInUser);         }         else         {             loggedInUser = 
http://www.itnose.net/detail/6111782.html 2014-09-15 10:42   [JavaWeb]

  1  2  3  4  5 下一页>