Spring-Security练习
来源:互联网 发布:自动谱曲软件下载 编辑:程序博客网 时间:2024/06/02 03:20
一.根据不同的用户所访问的页面不同(普通用户和管理员)及登陆验证。
1.所用技术:Mybatis(H2数据库)+Spring+Springmvc+Spring-Security.
2.Spring-Security所需jar包:
3.mvc结构:
4.具体实现:
(1)web.xml的SpringSecurity过滤器的配置:
<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)创建WebSecurityConfig类继承WebSecurityConfigurerAdapter类:加上注解:
@Configuration //beans
@EnableWebSecurity //开启web security支持:应用bean容器里的WebSecurityConfigurer
(3)重写WebSecurityConfig类的userDetailsService方法:固定绑定角色,(可优化)
@Override public UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withUsername("user") .password("123456") .roles("USER").build()); manager.createUser(User.withUsername("admin") .password("123789") .roles("ADMIN").build()); return manager; }
(4) 重写WebSecurityConfig类的configure方法(请求分区,过滤器请求权限的拦截):它自带登陆页面,如果用自己自定义的登陆页面,则加上.loginPage(“/login”),下面会由自定义的登陆页面展示。
当非管理员登陆请求(“/admin/**’)会出现没有权限错误:
(5) 优化(3),从数据库拿用户数据,并登陆验证:数据库存的密码为密文,当登陆时输入密码(123456为例),Spring-Security自动转为密文,与数据库密文相比较(两者不同,但变成明文时都为123456)
创建User类继承org.springframework.security.core.userdetails.User,它自带的User类,
创建UserDetailsServiceImpl类继承UserDetailsService类重写它的loadUserByUsername方法,返回上面User类型参数,会自动校验,根据从登陆时,传过来的username参数
WebSecurityConfig类中开启密码加密,创建Bean
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
这个具体实现校验我也不知道,没看源码,只知道这样用。。。
二 .进入主页后的退出实现(封装好了的,不要做修改):相对应的登陆页面会由提示信息,具体如何自定义的登陆页面
三.Aop方法上的权限拦截:
当role(角色)由多个时:当请求只有同时是ADMIN和HR时才能访问,但请求分区(过滤器请求权限的拦截)只限定admin用户和普通用户(一大点中的第四小点图中的画红线部分),不能区分ADMIN用户和同时具有ADMIN和HR两种身份的用户(细分),我们可以在调用的service层的接口方法上,加上注解,限制管理员用户中(ADMIN)的HR用户的才能调用。
(1)
(2) 必须在WebSecurityConfig类中配置@EnableGlobalMethodSecurity(securedEnabled = true),用来识别限制方法上的(@Secured)注解。
四.很多网站的登陆都有记住账号密码这个功能:
(1)在WebSecurityConfig这个类中configure方法写上:
五:根据角色页面显示不同:
Spring-Security由自带的标签库需要引入包:只有HR登陆首页才会显示链接
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>//引入<sec:authorize access="hasRole('HR')"> <a href="${pageContext.request.contextPath}/admin/employees">员工表</a> </sec:authorize>
六:当登陆成功时,会将用户信息显示在导航栏(例如:欢迎某某登陆)
七:login页面,官方文档中有,错误信息,退出登陆提示,都有:
官网的如下:
总结:
权限管理:
(1) 从请求地址上拦截,通过web.xml过滤器的配置,再到继承了WebSecurityConfigurerAdapter的WebSecurityConfig类的重写方法中配置:
(2) aop 方法上的拦截,在service层的具体方法上加上配置。
(3) spring aop 思想体现: 事务管理和权限管理.
- Spring-Security练习
- Spring Security
- Spring Security
- spring security
- spring security
- spring security
- spring security
- spring security
- spring security
- spring security
- spring security
- spring security
- Spring Security
- spring security
- spring-security
- Spring Security
- Spring Security
- spring security
- 图的概念 存储结构和遍历
- TensorFlow入门(3)-单层神经网络实现方法
- 前台技术栈
- Flowable读取文本文件
- Viewpager小圆点ImageLoader加载
- Spring-Security练习
- 从头实现一个深度学习对话系统--tensorflow Seq-to-Seq API介绍和源码分析
- SpringMVC接受JSON参数详解及常见错误总结
- Ueditor+ajax视频保存到本地和视频url在另一个页面播放
- java学习初探十八之线程的调度与控制_让位yield_合并jion
- JieCaoVideoPlayer,视频播放,极简单
- Scrapy ImagesPipeline下载图片
- JQuery选择器之位置选择器
- 空合并操作符