`
hanwesley
  • 浏览: 56965 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring security 实战应用

 
阅读更多

权限管理:
 角色
 用户
 资源
 某个用户拥有多个角色,一个角色也可以被多个用户拥有
 一个角色对应访问多个资源,一个资源也可以被多个角色访问

spring security的具体应用如下。
版本:3.0.5

1)web.xml配置
 <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:com/applicationContext.xml</param-value>
 </context-param>

 <filter>
   <filter-name>springSecurityFilterChain</filter-name>
   <filter-class>
    org.springframework.web.filter.DelegatingFilterProxy
   </filter-class>
 </filter>

 <filter>
   <filter-name>httpSessionContextIntegrationFilter</filter-name>
   <filter-class>
    org.springframework.security.web.context.HttpSessionContextIntegrationFilter
   </filter-class>
 </filter>
 
 <filter-mapping>
   <filter-name>springSecurityFilterChain</filter-name>
   <url-pattern>/*</url-pattern>
   <dispatcher>REQUEST</dispatcher>
   <dispatcher>INCLUDE</dispatcher>
   <dispatcher>FORWARD</dispatcher>
 </filter-mapping>
 <listener>
   <listener-class>
    org.springframework.web.context.ContextLoaderListener
   </listener-class>
 </listener>
 <listener>
   <listener-class>
  org.springframework.web.context.request.RequestContextListener
   </listener-class>
 </listener>

2)页面改造
 如果要加验证码功能,可以在此fileter前加验证
 <form action="${pageContext.request.contextPath}/j_spring_security_check" name="logonActionForm" method="post">
  <input type="text" name="j_username" value=""/>
  <input type="password" name="j_password" value="" />
 </form>
 
3)spring security 配置

 <http auto-config="true" >
   <intercept-url pattern="/logon.jsp" filters="none" />
   <intercept-url pattern="/logonAction.do" filters="none" />
   <intercept-url pattern="/public/logoutSuccess.jsp" filters="none"/>
   <intercept-url pattern="/public/**"/>
   <intercept-url pattern="/js/**" filters="none" /> 
      <intercept-url pattern="/css/**" filters="none" /> 
      <intercept-url pattern="/images/**" filters="none" />
      <intercept-url pattern="/theme/**" filters="none" />
   <intercept-url pattern="/**" access="ROLE_AA,ROLE_BB,ROLE_BROWSER"  requires-channel="any" />
  <form-login login-page="${url.login}" 
           default-target-url="/logonAction.do" 
           authentication-failure-url="${url.login}"
           login-processing-url="/j_spring_security_check"
        />
  <logout invalidate-session="true" logout-url="${url.logoutUrl}" logout-success-url="${url.logoutSuccess}" />

  <anonymous />
 <session-management invalid-session-url="${url.logoutUrl}" />
 </http>

 <beans:bean id="userCheckServiceImpl" class="com.sample.UserCheckServiceImpl">
 
 <authentication-manager> 
  <!--编程方式获得用户权限-->
  <authentication-provider user-service-ref='userCheckServiceImpl'/>
  <!--固定用户名密码方式-->
  <authentication-provider>
  <password-encoder hash="md5">
   <salt-source user-property="username"/>
  </password-encoder>  
  <user-service>
   <user name="aatest" password="aatest" authorities="ROLE_AA" />
   <user name="admin" password="admin" authorities="ROLE_BROWSER,ROLE_BB,ROLE_AA" />
  </user-service> 
  </authentication-provider>
</authentication-manager> 

 <global-method-security>
 <protect-pointcut expression="execution(* com.sample.exec(..))" access="ROLE_PA" />
 <protect-pointcut expression="execution(* com.sample.read(..))" access="ROLE_CA,ROLE_PA,ROLE_BROWSER" />
 </global-method-security>

//编程方式校验用户
public class UserCheckServiceImpl implements UserDetailsService {
  public UserDetails loadUserByUsername(String userName)
    throws UsernameNotFoundException, DataAccessException {
   //MockDao
   if(!userName.equals("aatest")){
   return null;
   }
   List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
   authorities.add(new GrantedAuthorityImpl("ROLE_AA"));
   UserDetails userDetails = new User("aatest", "aatest", true, true,
  true, true, authorities);
   return userDetails;
  }
}

//验证后得到用户信息
 SecurityContext ctx =SecurityContextHolder.getContext();
  ctx  = (SecurityContext) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");
  Authentication auth = ctx.getAuthentication();
  Object principal = auth.getPrincipal();
  UserDetails user = null;
  if(principal instanceof UserDetails){
   user = (UserDetails)principal;
  }

分享到:
评论

相关推荐

    SpringSecurity实战教程.txt

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,...

    全套Spring Security入门到项目实战课程

    Spring Security框架介绍 ...Spring Security与Web应用安全 Spring Security用户认证流程 Spring Security用户授权管理 Spring Security与Spring集成 Spring Security最佳实践 Spring Security安全漏洞与防范

    动力节点最新SpringSecurity框架教程配套资料分享

    Spring Security是一个功能强大的认证和访问控制框架,提供基于Spring应用程序的认证和授权功能。 本套视频适合具有SpringBoot基础、具有数据库基本使用经验的软件从业人员。 课程内容主要分为: 安全入门,认证...

    SpringCloud视频教程全套百度网盘

    第4章 SpringSecurity安全详细讲解及应用 第5章 RabbitMQ高级消息的讲解及应用 第6章 ElasticSearch详细讲解及应用 第7章 Eureka分布式服务器的搭建 。。。。。。。。。 第15章 SpringCloud项目实战 。。。。。。。...

    Spring Boot 2企业应用实战

    详细讲解SpringBoot2.0,整合常用资源如:Mybatis,Thymeleaf,Jsp,SpringSecurity,JPA等框架,详细介绍了SpringBoot2的重要改动与特性。

    基于SpringBoot+SpringSecurity的RBAC管理系统,易读易懂.zip

    安全性:内置的安全特性,如OAuth2和Spring Security,确保您的应用程序安全无虞。 微服务支持:SpringBoot是微服务架构的理想选择,可以帮助您构建模块化、可扩展的应用程序。 社区支持:全球的开发者社区意味着您...

    SpringSecurity安全框架企业中应用

    涉及到目前互联网项目中最常用的高并发解决方案技术, 如 dubbo,redis,solr,freemarker,activeMQ,springBoot框架,微信支付,nginx负载均衡,电商活动秒杀,springSecurity安全框架,FastDFS分布式文件服务器,还会涉及到...

    ssm框架整合Spring Security项目.zip

    实战项目与经验分享:通过实际项目实战,让您在实践中掌握SSM的运用,同时分享经验与心得,让您少走弯路。 三、适用人群与场景 无论您是初学者还是资深开发者,无论您是在校学生还是职场人士,本系列资料都将是您...

    (SSM、Spring Boot、Spring Security、MinIO、Vue). 以Java项目实践

    中高级开发者:这些项目将为您提供丰富的实战经验和灵感,帮助您提升技术水平和解决问题的能力。 项目经理和架构师:这些项目可以作为参考和模板,帮助您更好地规划和设计实际业务场景中的Java项目。 四、下载与使用...

    (SSM、Spring Boot、Spring Security、MinIO、Vue)各种项目实践,并附上高质量文章讲解

    实战项目与经验分享:通过实际项目实战,让您在实践中掌握SSM的运用,同时分享经验与心得,让您少走弯路。 三、适用人群与场景 无论您是初学者还是资深开发者,无论您是在校学生还是职场人士,本系列资料都将是您...

    JavaEE开发的颠覆者 Spring Boot实战,多个地址免费下载,

    JavaEE开发的颠覆者 Spring Boot实战,多个地址免费下载,第一部分 点睛Spring 4.x 第1 章 Spring 基础 ..........................................2 1.1 Spring 概述 ................................................

    spring-boot-demo:Spring Boot和Spring Cloud和Spring Security演示案例(Spring学习示例实战项目)

    SpringBoot + SpringCloud + SpringSecurity学习过程中的二进制汇总,沉淀记录下学习历程 1.知识点图谱 所有博文集中发布在个人博客网站: 大致规划的内容包括以下章节,希望能用半年到一年(严重超期)的时间完成....

    spring-boot示例项目

    Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...

    一套极简的后台管理系统, 基于SpringBoot、SpringSecurity、Mysql8.0、Vue3开发.zip

    Vue3,springboot,element-ui使用技巧,实战应用开发小系统参考资料,源码参考。 Vue3,springboot,element-ui使用技巧,实战应用开发小系统参考资料,源码参考。 Vue3,springboot,element-ui使用技巧,实战应用...

    实战Acegi_使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for Spring,当前版本为 0.8.3。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for Spring,当前版本为 0.8.3。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...

    JavaEE开发的颠覆者+Spring+Boot实战++完整版

    avaEE开发的颠覆者 Spring Boot实战 完整版+书签+pdf+源码.rar JavaEE开发的颠覆者 Spring ..., 当你学完《JavaEE开发的颠覆者: Spring Boot实战》后,你将能使用Spring Boot 解决Java EE 开发中所遇到的绝大多数问题

Global site tag (gtag.js) - Google Analytics