`
hanwesley
  • 浏览: 57315 次
  • 性别: 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安全漏洞与防范

    基于SpringBoot3.1SpringSecurity6.1Mybatis-Plus等框架,开发的一套企业级低代码开发平台

    采用SpringBoot3.1、SpringSecurity6.1、Mybatis-Plus等框架,开发的一套企业级低代码开发平台,使用门槛极低,且采用MIT开源协议,完全免费开源,可免费用于商业项目等场景,采用组件模式,扩展不同的业务功能,...

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

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

    spring_in_action-sixth-edition.pdf

    Spring 实战包括使用 Spring Boot 构建 Web 应用程序、使用 Spring Data 构建数据访问层、使用 Spring Security 构建安全应用程序等。 10. Spring 生命周期 Spring 生命周期是指 Spring 应用程序从启动到关闭的...

    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,拦截器和...

Global site tag (gtag.js) - Google Analytics