内容简介,执行流程与入门案例内容讲解
树图思维导图提供 SpringSecurity思维脑图 在线思维导图免费制作,点击“编辑”按钮,可对 SpringSecurity思维脑图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:251ca08f62f7477ff280a1760f075b54
SpringSecurity-01思维导图模板大纲
1.1权限控制出现的原因
在JavaWeb项目中
问题1:在生产环境下,一个项目模块可以在不登录的时候操作吗? 肯定是不行的,首先要登录才能进行操作
问题二:是不是所有用户只要登录成功就可以操作 所有的功能模块? 不行,不是只要登录成功就可以操作所有的模块 不同的角色会展示不同的菜单,可以操作的模块功能也是不一样的
1.2权限控制简介
认证
认证的本质就是登录,系统提供的用于识别用户身份的功能 通常提供用户名 和 密码 其实就是在进行认证 认证的目的就是让系统知道你是谁
授权
用户认证成功后,需要为用户授权, 其实就是指定当前用户 拥有哪些 角色, 这些 角色有哪些 权限 这些 权限 可以控制操作 哪些功能
常用的权限控制框架
SpringSecurity
这个框架是当前最主流的框架
Apache Shiro
不常用,知道就行
1.3权限控制数据模型
用户表和角色表是多对多关系 角色表和权限表是多对多关系 角色表和菜单表是多对多关系
要实现最终的权限控制,需要表结构支撑
用户表
t_user
权限表
t_permission
角色表
t_role
菜单表
t_menu
用户角色关系表
t_user_role
角色权限关系表
t_role_permission
角色菜单关系表
t_role_menu
在认证 和 授权 过程中会用到哪些表? 认证过程:只需要用到用户表就可以了,在用户登录时可以查询用户表进行校验,判断用户输入的用户名和密码是否正确。 授权过程:用户必须完成认证之后才可以进行授权, 首先可以 根据 用户 查询 角色 ,再 根据 角色 查询 对应的菜单 这样就确定了用户可以看到那些菜单, 然后再 根据 用户的角色 查询对应的 权限 这样就确定了用户有哪些权限 所以 授权会 用到所有的七张表
SprignSecurity快速入门
首先创建一个JavaWeb项目 通过maven
在项目的pom.xml文件中引入相关依赖
spring-webmvc
spring-security-core
spring-security-web
spring-security-config
spring-security-taglibs
添加tomcat插件
tomcat7-maven-plugin
在项目的web.xml文件中进行相关配置
springSecurity入口
filter DelegatingFilterProxy委托筛选代理
filter mapping springSecurityFilterChain spring安全过滤链
在项目的resources中创建spring-security.xml文件,并进行相关权限控 制
配置mvc-anno mvc注解支持 context:component-scan包扫描 视图解析器mvc:view-resolvers InternalResourceViewResolver
<!-- 一: 匿名访问规则设置-->
<security:http pattern="/pages/**" security="none"/>
<security:http pattern="/login.jsp" security="none"/>
<!-- 二: 权限控制规则配置--> <security:http auto-config="true" use-expressions="true"
<!-- 2.1 权限控制的资源路径为所有路径 及其子路径 且必须拥有对应角色才能访问
<security:intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')"/>
<!-- 2.2自定义登录页面
<security:form-login login-page="/login.jsp" username-parameter="username" password-parameter="password" login-processing-url="/login" default-target-url="/index.jsp" always-use-default-target="true" authentication-failure-url="/login.jsp" />
<!-- 2.3禁用csrf过滤器 -->
<security:csrf disabled="true"/>
<!-- 三:构建UserDetailsService的bean对象 -->
<bean id="userDetailService" class="com.lanou.security.SpringSecurityUserDetailService"/>
自己创建 用户详细信息服务类
<!-- 四:配置认证授权管理器 -->
<security:authentication-manager> <!--认证信息提供者,当判断访问路径的用户是否登录时,就需要拿着访问路径信息和提供者设置的用户信息比较,一致登录--> <security:authentication-provider user-service-ref="userDetailService"> <!-- 需要在java中包中配置实体类实现userDetailService接口 -->
authentication-mannnager <!-- 主要用来管理访问路径对应的用户和认证的授权规则 -->
authentication-provider
ser-service-ref="userDetailService"
<!-- 需要在java中包中配置实体类实现userDetailService接口 -->
<!--认证信息提供者,当判断访问路径的用户是否登录时,就需要拿着访问路径信息和提供者设置的用户信息比较,一致登录-->
编写具体用户详细服务类 (自定义登录类) (认证授权类)
认证授权类
赖注入Mapper接口
/**当用户在登录页面输入账号和密码之后,点击登录按钮访问springsecurity后台代码, * springsecurity默认会调用此方法 *1.查询数据库中的用户信息,判断用户是否存在 ————————————————————认证 *2。查询用户的 角色表 权限表 ,构建权限 ,并给登录的用户 赋予权限——————授权 * *3.判断用户 输入的密码是否 和 数据库中查询出来的一致 内部进行,不用自己编写
/1.根据页面用户输入的账户信息,查询数据库中的用户信息,判断用户是否存在
//用户存在, //2.根据用户的id信息,查询数据库中用户对应的 // 角色表 和 权限表, // 构权 , 并给登录的用户赋权
//赋权 //3.判断用户输入的密码是否和数据库查询出来的一致 //参数1:登录用户的用户名 //参数2:数据库查询出来的用户的密码 //参数3:给用户赋的权 org.springframework.security.core.userdetails.User userDetails = new org.springframework.security.core.userdetails.User(user.getUserName(),"{noop}"+user.getPassword(),list);
匿名访问
<!-- 一: 匿名访问规则设置-->
<security:http pattern="/pages/**" security="none"/>
<security:http pattern="/login.jsp" security="none"/>
自定义登录
<!-- 2.2自定义登录页面
<security:form-login login-page="/login.jsp" username-parameter="username" password-parameter="password" login-processing-url="/login" default-target-url="/index.jsp" always-use-default-target="true" authentication-failure-url="/login.jsp" />
自定义认证
编写一个类SpringSecurityUserService,实现UserDetailsService接口, 并实现loadUserByUsername。
子主题 1
Spring Security是Spring 提供的安全认证服务的 框架 ,是一个 能够基于spring的企业应用系统提供声明式 的安全访问控制解决方案的 安全 框架
它提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了 Spring IoC,DI(控制反转 Inversion of Control ,DI:Dependency Injection 依赖注入)和 AOP(面向切面编程)功能,为应用系统提供声明 式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的 工作。
SpringSecurity执行流程
树图思维导图提供 1107文家市玉萍思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 1107文家市玉萍思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:ed943ef641f6dc874860eb6095857ed6
树图思维导图提供 种子思维脑图 在线思维导图免费制作,点击“编辑”按钮,可对 种子思维脑图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:86f8307a40ea24607c6c79354e09377f