*1.为什么要学习SpringSecurity?
*1.session窃取(固化攻击):解决方法登录前一个cookie信息 (sessionId),登录后改一个cookie(sessionId)
*2.网站资源没有经过权限保护
*2.什么是SpringSecurity?
Spring 基于Spring框架编写的(IOC核心功能,可以与spring进行无缝集成)
Security 提高系统的安全性
是一个开源的框架。
*3.关于SpringSecurity的版本
社区比较活跃,版本升级比较的频繁。
教学版本:spring security 3.1
*4编写Hello world体验SpringSecurity3.1作用
*1.搭建开发环境
jar包、配置文件、在web.xml中配置springsecurity
web.xml中的配置
<!-- 配置springsecurity session监听,主要实现session固化攻击防御和session并发控制 -->
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
<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>
*2.测试 crm/index.jsp
springsecurity内置一个登录页面
*5.细研SpringSecurity3.1
*1.如何告诉springsecurity,正确的用户名和密码?
*1.1.硬编码方式:
<!-- 配置认证管理器 -->
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider>
<!-- 通过硬编码的方式提供 -->
<security:user-service>
<security:user name="william" password="william" authorities="ROLE_MASTER22"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
缺点:
在实际开发里面,不能使用.都要使用从数据库里面查询的方式
authorities="ROLE_MASTER22"权限名,如果与访问资源所需要的权限名不同的话,页面将抛出403异常(权限被拒绝)
*2.如何告诉springsecurity使用我们自定义的登录表单
*1.springSecurity配置文件中:
<!-- 配置登录页面 -->
<!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面.
login-processing-url:发送的登录请求 -->
<security:form-login default-target-url="/sys/loginAction.action"
login-page="/login.jsp" authentication-failure-url="/prelogin.jsp"
login-processing-url="/loginForSpringSecurity" />
*2.把login.jsp <form action="loginForSpringSecurity">
*3.把login.jsp <form action="loginForSpringSecurity">里面的用户名和密码的name属性值进行更改
<input class="user_name" type="text" name="j_username" id="username" />
<input class="user_pwd" type="password" name='j_password' id="password" />
*3.把springSecurity配置成企业级应用
*1.执行原理
*1.1.文字版
1)容器启动(CustomFilterInvocationSecurityMetadataSourceImpl:loadResourceDefine加载系统资源与权限列表)
2)用户发出请求
3)过滤器拦截(CustomFilterSecurityInterceptorImpl:doFilter)
4)取得请求资源所需权限(CustomFilterInvocationSecurityMetadataSourceImpl:getAttributes)
5)匹配用户拥有权限和请求权限(CustomAccessDecisionManagerImpl:decide),如果用户没有相应的权限,
执行第6步,否则执行第7步。
6)登录
7)验证并授权(CustomUserDetailsServiceImpl:loadUserByUsername)
8)重复4,5
*1.2.图形版
*2.讲配置
*1.从数据库里面,加载资源与角色的列表
实现FilterInvocationSecurityMetadataSource接口
*2.用户的请求,如何给我们自定义的拦截器
Filter
*3.自定义规则器(匹配访问该资源的权限与目前登录者所具有的权限 )
*3.1.看看当前登录者身份信息(角色是什么)
自定义授权认证器:必须实现UserDetailsService接口
返回数据的dto必须实现 UserDetails接口
*3.2.根据请求资源的uri,从map里面加载访问该资源所应有的角色是什么
*3.3.资源所应有的角色与当前登录者的角色进行比较
*1.情况一:如果该用户没有进行登录,跳转到登录页面去
*2.情况二:如果该用户已经进行登录,但没有访问该资源的权限,则抛出403异常
自定义的比较器,需要继续AccessDecisionManager类
*4.配置SpringSecurity的md5加密类
继承:BasePasswordEncoder
让SpringSecurity自动调用
*4.如何在Struts2里面拿到由SpringSecurity3.1.x验证后的用户信息?
SysUserDTO result = (SysUserDTO)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
*1.session窃取(固化攻击):解决方法登录前一个cookie信息 (sessionId),登录后改一个cookie(sessionId)
*2.网站资源没有经过权限保护
*2.什么是SpringSecurity?
Spring 基于Spring框架编写的(IOC核心功能,可以与spring进行无缝集成)
Security 提高系统的安全性
是一个开源的框架。
*3.关于SpringSecurity的版本
社区比较活跃,版本升级比较的频繁。
教学版本:spring security 3.1
*4编写Hello world体验SpringSecurity3.1作用
*1.搭建开发环境
jar包、配置文件、在web.xml中配置springsecurity
web.xml中的配置
<!-- 配置springsecurity session监听,主要实现session固化攻击防御和session并发控制 -->
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
<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>
*2.测试 crm/index.jsp
springsecurity内置一个登录页面
*5.细研SpringSecurity3.1
*1.如何告诉springsecurity,正确的用户名和密码?
*1.1.硬编码方式:
<!-- 配置认证管理器 -->
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider>
<!-- 通过硬编码的方式提供 -->
<security:user-service>
<security:user name="william" password="william" authorities="ROLE_MASTER22"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
缺点:
在实际开发里面,不能使用.都要使用从数据库里面查询的方式
authorities="ROLE_MASTER22"权限名,如果与访问资源所需要的权限名不同的话,页面将抛出403异常(权限被拒绝)
*2.如何告诉springsecurity使用我们自定义的登录表单
*1.springSecurity配置文件中:
<!-- 配置登录页面 -->
<!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面.
login-processing-url:发送的登录请求 -->
<security:form-login default-target-url="/sys/loginAction.action"
login-page="/login.jsp" authentication-failure-url="/prelogin.jsp"
login-processing-url="/loginForSpringSecurity" />
*2.把login.jsp <form action="loginForSpringSecurity">
*3.把login.jsp <form action="loginForSpringSecurity">里面的用户名和密码的name属性值进行更改
<input class="user_name" type="text" name="j_username" id="username" />
<input class="user_pwd" type="password" name='j_password' id="password" />
*3.把springSecurity配置成企业级应用
*1.执行原理
*1.1.文字版
1)容器启动(CustomFilterInvocationSecurityMetadataSourceImpl:loadResourceDefine加载系统资源与权限列表)
2)用户发出请求
3)过滤器拦截(CustomFilterSecurityInterceptorImpl:doFilter)
4)取得请求资源所需权限(CustomFilterInvocationSecurityMetadataSourceImpl:getAttributes)
5)匹配用户拥有权限和请求权限(CustomAccessDecisionManagerImpl:decide),如果用户没有相应的权限,
执行第6步,否则执行第7步。
6)登录
7)验证并授权(CustomUserDetailsServiceImpl:loadUserByUsername)
8)重复4,5
*1.2.图形版
*2.讲配置
*1.从数据库里面,加载资源与角色的列表
实现FilterInvocationSecurityMetadataSource接口
*2.用户的请求,如何给我们自定义的拦截器
Filter
*3.自定义规则器(匹配访问该资源的权限与目前登录者所具有的权限 )
*3.1.看看当前登录者身份信息(角色是什么)
自定义授权认证器:必须实现UserDetailsService接口
返回数据的dto必须实现 UserDetails接口
*3.2.根据请求资源的uri,从map里面加载访问该资源所应有的角色是什么
*3.3.资源所应有的角色与当前登录者的角色进行比较
*1.情况一:如果该用户没有进行登录,跳转到登录页面去
*2.情况二:如果该用户已经进行登录,但没有访问该资源的权限,则抛出403异常
自定义的比较器,需要继续AccessDecisionManager类
*4.配置SpringSecurity的md5加密类
继承:BasePasswordEncoder
让SpringSecurity自动调用
*4.如何在Struts2里面拿到由SpringSecurity3.1.x验证后的用户信息?
SysUserDTO result = (SysUserDTO)SecurityContextHolder.getContext().getAuthentication().getPrincipal();