《Spring security.pptx》由会员分享,可在线阅读,更多相关《Spring security.pptx(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、SPRING SECURITY企业应用系统提供声明式的安全访问控制解决方案BriefSpring Security 的前身是 Acegi Security,是 Spring 项目组中用来提供安全认证服务的框架。Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。FunctionSpring Security对Web安全性的支持大量地依赖于Servlet过滤器。这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安全处理。Spring Security提供有若干个过滤器,它们能够拦截Servl
2、et请求,并将这些请求转给认证和访问决策管理器处理,从而增强安全性。Advantage人们使用Spring Security有很多种原因,不过通常吸引他们的是在J2EE Servlet规范或EJB规范中找不到典型企业应用场景的解决方案。特别要指出的是他们不能在WAR 或 EAR 级别进行移植。这样,如果更换服务器环境,就要,在新的目标环境进行大量的工作,对应用系统进行重新配置安全。Advantage使用Spring Security 解决了这些问题,也提供很多有用的,完全可以指定的其他安全特性。可能知道,安全包括两个主要操作。第一个被称为“认证”,是为用户建立一个他所声明的主体。主体一般是指用
3、户,设备或可以在系统中执行动作的其他系统。第二个叫“授权”,指的是一个用户能否在应用中执行某个操作,在到达授权判断之前,身份的主体已经由身份验证过程建立。这些概念是通用的,不是Spring Security特有的。Advantage在身份验证层面,Spring Security广泛支持各种身份验证模式,这些验证模型绝大多数都由第三方提供,或者正在开发的有关标准机构提供的,例如 Internet Engineering Task Force.作为补充,Spring Security 也提供了自己的一套验证功能。Application我们知道,Web 应用的安全性包括用户认证(Authentica
4、tion)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中 的合法主体,也就是说用户能否访问该系统。用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个 资源来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。这是web.xml配置文件 !SetCharacterEncodingorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncod
5、ingtrueSetCharacterEncoding/*springSecurityFilterChainorg.springframework.web.filter.DelegatingFilterProxyspringSecurityFilterChain/*index.jspcontextConfigLocationWEB-INF/classes/applicationContext.xml,WEB-INF/spring3-servlet.xml,WEB-INF/spring-security.xmlorg.springframework.web.context.request.Req
6、uestContextListenerorg.springframework.web.context.ContextLoaderListenerspring3org.springframework.web.servlet.DispatcherServlet1spring3/然后是 spring-security.xml这是文件的开头配置内容 和Spring的xml基本相似!-然后看到我们的CustomUserDetailsService.javaJava代码 packageorg.yzsoft.springmvcdemo.util;importjava.util.ArrayList;impor
7、tjava.util.Collection;importjava.util.List;importorg.apache.log4j.Logger;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.dao.DataAccessException;importorg.springframework.security.core.GrantedAuthority;importorg.springframework.security.core.authority.GrantedAu
8、thorityImpl;importorg.springframework.security.core.userdetails.User;importorg.springframework.security.core.userdetails.UserDetails;importorg.springframework.security.core.userdetails.UserDetailsService;importorg.springframework.security.core.userdetails.UsernameNotFoundException;importorg.yzsoft.s
9、pringmvcdemo.serviceimpl.UsersServiceImpl;importorg.yzsoft.springmvcdemo.vo.TUsers;/*一个自定义的类用来和数据库进行操作.*即以后我们要通过数据库保存权限.则需要我们继承UserDetailsService.*author*/publicclassCustomUserDetailsServiceimplementsUserDetailsServiceprotectedstaticLoggerlogger=Logger.getLogger(service);/log4j,不用解释了吧。Autowiredpriva
10、teUsersServiceImplusersService;publicUsersServiceImplgetUsersService()returnusersService;publicvoidsetUsersService(UsersServiceImplusersService)this.usersService=usersService;publicUserDetailsloadUserByUsername(Stringusername)throwsUsernameNotFoundException,DataAccessExceptionUserDetailsuser=null;tr
11、y/搜索数据库以匹配用户登录名./我们可以通过dao使用Hibernate来访问数据库System.out.println(username+用户页面输入的用户名);TUserstusers=this.usersService.findByUsername(username);System.out.println(tusers.getUsername()+数据库取出的用户名);/PopulatetheSpringUserobjectwithdetailsfromthedbUser/Herewejustpasstheusername,password,andaccesslevel/getAuth
12、orities()willtranslatetheaccessleveltothe correct/roletype/用户名、密码、是否启用、是否被锁定、是否过期、权限user=newUser(tusers.getUsername(),tusers.getPassword().toLowerCase(),true,true,true,true,getAuthorities(Integer.parseInt(tusers.getRole();catch(Exceptione)logger.error(用户信息错误!);thrownewUsernameNotFoundException(异常处理:
13、用户信息未通过!);returnuser;/*获得访问角色权限列表*paramaccess*return*/publicCollectiongetAuthorities(Integerrole)System.out.println(取得的权限是:+role);ListauthList=newArrayList();/所有的用户默认拥有ROLE_USER权限if(role=0)System.out.println(普通用户);logger.debug(取得普通用户权限-);authList.add(newGrantedAuthorityImpl(ROLE_USERS);/如果参数role为1.则拥有ROLE_ADMIN权限if(role=1)logger.debug(取得ADMIN用户权限-);authList.add(newGrantedAuthorityImpl(ROLE_ADMIN);System.out.println(authList.size()+权限列表长度);returnauthList;
限制150内