关系经济人类预测化学自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

SpringSecurity的初次邂逅

4月8日 天浪楼投稿
  1。SpringSecurity概念
  SpringSecurity是Spring采用AOP思想,基于servlet过滤器实现的安全框架。它提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。
  SpringSecurity是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的事实上的标准。
  SpringSecurity是一个框架,致力于为Java应用程序提供身份验证和授权。像所有Spring项目一样,SpringSecurity的真正强大之处在于它可以轻松扩展以满足定制需求的能力。
  特征
  对身份验证和授权的全面且可扩展的支持
  保护免受会话固定,点击劫持,跨站点请求伪造等攻击
  ServletAPI集成
  与SpringWebMVC的可选集成1。2快速入门案例1。2。1环境准备
  准备一个SpringMVCSpringjsp的Web环境,然后在这个基础上整合SpringSecurity。
  首先创建Web项目
  添加相关的依赖
  junit
  junitartifactId
  4。11
  test
  org。springframework
  springwebmvcartifactId
  5。2。1。RELEASE
  javax。servlet
  servletapiartifactId
  2。5
  provided
  org。slf4j
  slf4jlog4j12artifactId
  1。7。25
  添加相关的配置文件
  Spring配置文件
  ?xmlversion1。0encodingUTF8?
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xmlns:contexthttp:www。springframework。orgschemacontext
  xsi:schemaLocationhttp:www。springframework。orgschemabeans
  http:www。springframework。orgschemabeansspringbeans。xsd
  http:www。springframework。orgschemacontext
  http:www。springframework。orgschemacontextspringcontext。xsd
  SpringMVC配置文件
  ?xmlversion1。0encodingUTF8?
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xmlns:contexthttp:www。springframework。orgschemacontext
  xmlns:mvchttp:www。springframework。orgschemamvc
  xsi:schemaLocationhttp:www。springframework。orgschemabeans
  http:www。springframework。orgschemabeansspringbeans。xsd
  http:www。springframework。orgschemacontext
  http:www。springframework。orgschemacontextspringcontext。xsd
  http:www。springframework。orgschemamvc
  http:www。springframework。orgschemamvcspringmvc。xsd
  log4j。properties文件
  log4j。rootCategoryINFO,stdout
  log4j。appender。stdoutorg。apache。log4j。ConsoleAppender
  log4j。appender。stdout。layoutorg。apache。log4j。PatternLayout
  log4j。appender。stdout。layout。ConversionPattern〔QC〕p〔t〕C。M(L)mn
  web。xml
  SunMicrosystems,Inc。DTDWebApplication2。3EN
  http:java。sun。comdtdwebapp23。dtd
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xsi:schemaLocationhttp:java。sun。comxmlnsjavaee
  http:java。sun。comxmlnsjavaeewebapp25。xsd
  ArchetypeCreatedWebApplication
  contextConfigLocation
  classpath:applicationContext。xml
  org。springframework。web。context。ContextLoaderListener
  CharacterEncodingFilter
  org。springframework。web。filter。CharacterEncodingFilter
  encoding
  utf8
  CharacterEncodingFilter
  dispatcherServletb
  org。springframework。web。servlet。DispatcherServlet
  contextConfigLocation
  classpath:springmvc。xml
  1hrdispatcherServletb
  添加Tomcat的插件启动测试
  org。apache。tomcat。maven
  tomcat7mavenpluginartifactId
  2。2
  8082hr
  1。2。2整合SpringSecurity
  添加相关的依赖
  springsecuritycore。jar核心包,任何SpringSecurity的功能都需要此包
  springsecurityweb。jar:web工程必备,包含过滤器和相关的web安全的基础结构代码
  springsecurityconfig。jar:用于xml文件解析处理
  springsecuritytablibs。jar:动态标签库
  org。springframework。security
  springsecurityconfigartifactId
  5。1。5。RELEASE
  org。springframework。security
  springsecuritytaglibsartifactId
  5。1。5。RELEASE
  web。xml文件中配置SpringSecurity
  springSecurityFilterChain
  org。springframework。web。filter。DelegatingFilterProxy
  springSecurityFilterChain
  添加SpringSecurity的配置文件
  ?xmlversion1。0encodingUTF8?
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xmlns:securityhttp:www。springframework。orgschemasecurity
  xsi:schemaLocationhttp:www。springframework。orgschemabeans
  http:www。springframework。orgschemabeansspringbeans。xsd
  http:www。springframework。orgschemasecurity
  http:www。springframework。orgschemasecurityspringsecurity。xsd
  将SpringSecurity的配置文件引入到Spring中
  启动测试访问
  2。认证操作2。1自定义登录页面
  
  CreatedbyIntelliJIDEA。
  User:dpb
  Date:2021316
  Time:16:57
  TochangethistemplateuseFileSettingsFileTemplates。
  pagecontentTcharsetUTF8languagejava
  Title
  登录页面
  修改相关的配置文件
  ?xmlversion1。0encodingUTF8?
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xmlns:securityhttp:www。springframework。orgschemasecurity
  xsi:schemaLocationhttp:www。springframework。orgschemabeans
  http:www。springframework。orgschemabeansspringbeans。xsd
  http:www。springframework。orgschemasecurity
  http:www。springframework。orgschemasecurityspringsecurity。xsd
  loginprocessingurllogin
  defaulttargeturlhome。jsp
  authenticationfailureurlerror。jsp
  logoutsuccessurllogin。jsp
  security:http
  beans
  blockquote
  访问home。jsp页面后会自动跳转到自定义的登录页面,说明这个需求是实现了
  但是当我们提交了请求后页面出现了如下的错误
  2。2关闭CSRF拦截
  为什么系统默认的登录页面提交没有CRSF拦截的问题呢
  我自定义的认证页面没有这个信息怎么办呢?两种方式:
  关闭CSRF拦截
  登录成功
  使用CSRF防护
  在页面中添加对应taglib
  我们访问登录页面
  登录成功
  2。3数据库认证
  前面的案例我们的账号信息是直接写在配置文件中的,这显然是不太好的,我们来介绍小如何实现和数据库中的信息进行认证
  添加相关的依赖
  org。mybatis
  mybatisartifactId
  3。5。4
  org。mybatis
  mybatisspringartifactId
  2。0。4
  mysql
  mysqlconnectorjavaartifactId
  8。0。11
  com。alibaba
  druidartifactId
  1。1。8
  添加配置文件
  jdbc。drivercom。mysql。cj。jdbc。Driver
  jdbc。urljdbc:mysql:localhost:3306logistics?characterEncodingutf8serverTimezoneUTC
  jdbc。usernameroot
  jdbc。password123456
  ?xmlversion1。0encodingUTF8?
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xmlns:contexthttp:www。springframework。orgschemacontext
  xsi:schemaLocationhttp:www。springframework。orgschemabeans
  http:www。springframework。orgschemabeansspringbeans。xsd
  http:www。springframework。orgschemacontext
  http:www。springframework。orgschemacontextspringcontext。xsd
  需要完成认证的service中继承UserDetailsService父接口
  实现类中实现验证方法
  packagecom。bobo。service。
  importcom。bobo。mapper。UserM
  importcom。bobo。pojo。U
  importcom。bobo。pojo。UserE
  importcom。bobo。service。IUserS
  importorg。springframework。beans。factory。annotation。A
  importorg。springframework。security。core。authority。SimpleGrantedA
  importorg。springframework。security。core。userdetails。UserD
  importorg。springframework。security。core。userdetails。UsernameNotFoundE
  importorg。springframework。stereotype。S
  importjava。util。ArrayL
  importjava。util。L
  Service
  publicclassUserServiceImplimplementsIUserService{
  Autowired
  privateUserM
  Override
  publicUserDetailsloadUserByUsername(Strings)throwsUsernameNotFoundException{
  根据账号查询用户信息
  UserExampleexamplenewUserExample();
  example。createCriteria()。andUserNameEqualTo(s);
  Listusersmapper。selectByExample(example);
  if(users!nullusers。size()0){
  Useruserusers。get(0);
  if(user!null){
  ListauthoritiesnewArrayList();
  设置登录账号的角色
  authorities。add(newSimpleGrantedAuthority(ROLEUSER));
  UserDetailsuserDetailsneworg。springframework。security。core。userdetails。User(
  user。getUserName(),{noop}user。getPassword(),authorities
  );
  returnuserD
  }
  }
  
  }
  }
  blockquote
  最后修改配置文件关联我们自定义的service即可
  2。4加密
  在SpringSecurity中推荐我们是使用的加密算法是BCryptPasswordEncoder
  首先生成秘闻
  修改配置文件
  去掉{noop}
  2。5认证状态
  用户的状态包括是否可用,账号过期,凭证过期,账号锁定等等。
  我们可以在用户的表结构中添加相关的字段来维护这种关系2。6记住我
  在表单页面添加一个记住我的按钮。
  在SpringSecurity中默认是关闭RememberMe功能的,我们需要放开
  这样就配置好了。
  记住我的功能会方便大家的使用,但是安全性却是令人担忧的,因为Cookie信息存储在客户端很容易被盗取,这时我们可以将这些数据持久化到数据库中。
  CREATETABLEpersistentlogins(
  usernameVARCHAR(64)NOTNULL,
  seriesVARCHAR(64)NOTNULL,
  tokenVARCHAR(64)NOTNULL,
  lastusedTIMESTAMPNOTNULL,
  PRIMARYKEY(series)
  )ENGINEINNODBDEFAULTCHARSETutf8
  注意设置了过期时间,到期后并不是删除表结构中的数据,而是客户端不会在携带相关信息了,同时删除掉数据库中的数据记住我也会失效3。授权3。1注解使用
  开启注解的支持
  ?xmlversion1。0encodingUTF8?
  xmlns:xsihttp:www。w3。org2001XMLSchemainstance
  xmlns:contexthttp:www。springframework。orgschemacontext
  xmlns:mvchttp:www。springframework。orgschemamvc
  xmlns:securityhttp:www。springframework。orgschemasecurity
  xsi:schemaLocationhttp:www。springframework。orgschemabeans
  http:www。springframework。orgschemabeansspringbeans。xsd
  http:www。springframework。orgschemacontext
  http:www。springframework。orgschemacontextspringcontext。xsd
  http:www。springframework。orgschemamvc
  http:www。springframework。orgschemamvcspringmvc。xsd
  http:www。springframework。orgschemasecurity
  http:www。springframework。orgschemasecurityspringsecurity。xsd
  security:globalmethodsecurity
  jsr250annotationsenabled
  prepostannotationsenabled
  securedannotationsenabled
  jsr250的使用
  添加依赖
  javax。annotation
  jsr250apiartifactId
  1。0
  控制器中通过注解设置
  packagecom。bobo。
  importorg。springframework。stereotype。C
  importorg。springframework。web。bind。annotation。RequestM
  importjavax。annotation。security。RolesA
  Controller
  RequestMapping(user)
  publicclassUserController{
  RolesAllowed(value{ROLEADMIN})
  RequestMapping(query)
  publicStringquery(){
  System。out。println(用户查询。。。。);
  returnhome。
  }
  RolesAllowed(value{ROLEUSER})
  RequestMapping(save)
  publicStringsave(){
  System。out。println(用户添加。。。。);
  returnhome。
  }
  RequestMapping(update)
  publicStringupdate(){
  System。out。println(用户更新。。。。);
  returnhome。
  }
  }
  Spring表达式的使用
  packagecom。bobo。
  importorg。springframework。security。access。prepost。PreA
  importorg。springframework。stereotype。C
  importorg。springframework。web。bind。annotation。RequestM
  importjavax。annotation。security。RolesA
  Controller
  RequestMapping(order)
  publicclassOrderController{
  PreAuthorize(valuehasAnyRole(ROLEUSER))
  RequestMapping(query)
  publicStringquery(){
  System。out。println(用户查询。。。。);
  returnhome。
  }
  PreAuthorize(valuehasAnyRole(ROLEADMIN))
  RequestMapping(save)
  publicStringsave(){
  System。out。println(用户添加。。。。);
  returnhome。
  }
  RequestMapping(update)
  publicStringupdate(){
  System。out。println(用户更新。。。。);
  returnhome。
  }
  }
  SpringSecurity提供的注解
  packagecom。bobo。
  importorg。springframework。security。access。annotation。S
  importorg。springframework。security。access。prepost。PreA
  importorg。springframework。stereotype。C
  importorg。springframework。web。bind。annotation。RequestM
  Controller
  RequestMapping(role)
  publicclassRoleController{
  Secured(ROLEUSER)
  RequestMapping(query)
  publicStringquery(){
  System。out。println(用户查询。。。。);
  returnhome。
  }
  Secured(ROLEADMIN)
  RequestMapping(save)
  publicStringsave(){
  System。out。println(用户添加。。。。);
  returnhome。
  }
  RequestMapping(update)
  publicStringupdate(){
  System。out。println(用户更新。。。。);
  returnhome。
  }
  }
  异常处理
  新增一个错误页面,然后在SpringSecurity的配置文件中配置即可
  当然你也可以使用前面介绍的SpringMVC中的各种异常处理器处理
  3。2标签使用
  前面介绍的注解的权限管理可以控制用户是否具有这个操作的权限,但是当用户具有了这个权限后进入到具体的操作页面,这时我们还有进行更细粒度的控制,这时注解的方式就不太适用了,这时我们可以通过标签来处里
  添加SpringSecurity的标签库
  
  CreatedbyIntelliJIDEA。
  User:dpb
  Date:2021316
  Time:17:02
  TochangethistemplateuseFileSettingsFileTemplates。
  pagecontentTcharsetUTF8languagejava
  taglibprefixsecurityurihttp:www。springframework。orgsecuritytags
  Title
  欢迎光临。。。
  用户查询
  用户添加
  用户更新
  用户删除
  页面效果
投诉 评论 转载

美媒预测202223赛季最强控球后卫,25名后卫谁被高估或低202223赛季差不多要开始了,大家都好奇谁会是NBA最好的控球后卫。于是,美媒《FadeawayWorld》也是按实力排名列出202223赛季现役最好的25名控球后卫,谁被高……深一度丨花滑荒漠之花!他拼了命,从墨西哥的溜冰场来到北京澎湃新闻记者胡杰蒲垚磊实习生汤若瑜多诺万卡里略终于实现了他的冬奥梦想。8日,首都体育馆响起音乐,多诺万卡里略清秀的面庞出现在观众面前。属于他的音乐穿透赛场时,他的脑……清明小长假,去山野间寻春,这里一半银装一半绿清明小长假将至,正是春暖花开的时节,大家也在盘点春日旅行计划。在这春阳临照的日子,毕棚沟邀您与家人相约雪山海子,从家出发,以孝为本,珍视家人的欢聚。春季万物生长最早……日本跨境电商市场分析飞书逸途想要做好跨境电商,一定要做好市场调研,对跨境电商市场有一个全面得了解,无论是新手还是想要拓宽市场的卖家,都可以更方便的选品、运营店铺。本篇文章中,飞书逸途将为跨境电商卖家们对日……ST大集受领大额金融资产业绩承诺履行顺利推进中证网讯(记者何昱璞)3月17日晚间,ST大集发布《关于受领海航商业控股有限公司及其一致行动人业绩承诺补偿债权进展的公告》,公司将受领2016年重大资产重组涉及的2018年、2……临夏诗影水杉长廊水杉长廊文驮夫摄影丁仲忻不知不觉又来到你的身旁季节的更替给了你独有的韵律霜花入怀更显旖旎长长的走廊里一颦,一笑,一回眸放慢脚步独……梦回圣天泰!郑龙进球,青岛海牛20陕西竞技青岛海牛2:0战胜陕西竞技!奥努埃布掩护谢文能和郑龙双双进球!以前都是对比赛场面不做过多赘述,本场比赛的上半场不得不啰嗦上两句,居然有控球了!控球了!不晓得今天有多少老球迷在期……染酱暴涨,全聚德10天6板,深交所火速发关注函!卖酒能救亏损本文来源:时代周报作者:黄嘉祥沾酒即暴涨的行情又在A股上演。烤鸭第一股全聚德(002186。SZ)近期因推出酱酒产品引发关注,在10个交易日内收获了6个涨停板,深交所也火……追女人时,多说三句话,早晚能得到她当你爱上某人时,你为他疯狂,你愿意付出所有的努力,任何行为都有一个目的,想把你的单相思爱变成孤儿。我曾经很天真,觉得喜欢一个人是我自己的事。但当我真的感动某人时,我意识到……好人傅彪41岁因病去世,妻子坚持16年不改嫁,被人铭记的一生每一个配角,在我心里都是主角。这是傅彪生前最常说的一句话。2005年8月,年仅42岁的著名演员傅彪因患肝癌去世消息一出使得娱乐圈中无数演员明星悲痛万分。葬礼上……曹格老婆晒女儿近照,11岁Grace衣着成熟颜值高,已现女神6月25日,曹格老婆吴速玲在个人社交平台分享了一组带女儿Grace外出就餐的美照。吴速玲首先晒出的是鸡蛋仔特写照,看着图片上的超爱两字就已经能感受到她的喜悦心情了。随后吴……SpringSecurity的初次邂逅1。SpringSecurity概念SpringSecurity是Spring采用AOP思想,基于servlet过滤器实现的安全框架。它提供了完善的认证机制和方法级的授权……
双11战报新消费趋势不断涌现,多品类迎来爆发增长保护肾脏降血脂降血糖,肾友们常吃这些食物就对了!4大养生方式基本等于自欺欺人,没用还可能伤身!说不定你身边就小米上新!米家智能无叶净化扇!众筹价1299元春茶正飘香,武夷山call你来采茶啦挑肥拣瘦,抓大放小,交强险不能利字当头新京报快评王者赵云保姆级教学上阿迪达斯推出新款Xbox联名运动鞋ForumTechBoos令人向往的丽江古城春天的最佳早餐,蛋白质高过牛肉,补脑又长个,简单好吃小鹏汽车硬核实力!智能驾驶新体验真人版美人鱼女主高调走红毯!裹布条学人玩性感,可惜身材拖后腿
我国在进口石油的同时,为何还出口成品油,卖价甚至比国内的低?路过黄昏女生碎发短发个性新潮最前卫三江之源(为什么叫三江之源)【歌词】andthehousefelldown歌手:Elto 三个月宝宝大便正常颜色是怎样的八年级幸福作文600字热传聚热点网 坐飞机可以带酒吗以马为话题的小学生作文200字我们班的奇女子痕迹一次集训作文700字

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州