当前位置: 首页 > news >正文

中国上海门户网seo技术优化

中国上海门户网,seo技术优化,大连哪个公司做网站开发的,提升关键词优化排名软件文章目录 1、配置用户权限2、针对URL授权3、针对方法的授权 1、配置用户权限 继续上一章,给在内存中创建两个用户配置权限。配置权限有两种方式: 配置roles配置authorities //哪个写在后面哪个起作用 //角色变成权限后会加一个ROLE_前缀,比…

文章目录

  • 1、配置用户权限
  • 2、针对URL授权
  • 3、针对方法的授权

1、配置用户权限

继续上一章,给在内存中创建两个用户配置权限。配置权限有两种方式:

  • 配置roles
  • 配置authorities
//哪个写在后面哪个起作用
//角色变成权限后会加一个ROLE_前缀,比如ROLE_teacher
UserDetails user2 = User.builder().username("thomas").password(passwordEncoder().encode("123456")).authorities("teacher:add","teacher:update").roles("teacher").build();UserDetails user2 = User.builder().username("thomas").password(passwordEncoder().encode("123456")).roles("teacher").authorities("teacher:add","teacher:update").build();

以上两种写法,顺序不同,获取当前登录用户时,得到的权限值也不一样。总结就是:

  • 如果给一个用户同时配置roles和authorities,哪个方法后面调用哪个起作用
  • 配置roles时,权限名会加上ROLE_

当然,从代码层来说,角色和权限并没太大区别,并特别是在Spring Security中。

2、针对URL授权

未做授权时,默认登录成功的用户可以访问所有资源(调任意一个接口),但有的接口只能允许管理员调用,因此,这里需要再实现授权功能。先看针对URL授权,即哪些权限可以访问哪些URL。新建配置类MyWebSecurityConfig,继承抽象类WebSecurityConfigurerAdapter,重写configure(HttpSecurity http)方法

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests()  //授权请求.anyRequest()   //任何请求.denyAll();  //拒绝所有请求访问//.permitAll(); //允许所有请求}
}

在这里插入图片描述
放开登录认证页面:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests()  //授权请求.anyRequest()   //任何请求.denyAll();  //拒绝所有请求访问//.permitAll(); //允许所有请求http.formLogin().permitAll();  //放开表单登录}
}

针对不同的url,要求拥有不同的权限才能访问,实现如下:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().mvcMatchers("/student/**").hasAnyAuthority("ROLE_student", "ROLE_teacher")   //有任一权限就能访问上面的url,形参是可变长字符串.mvcMatchers("/teacher/**").hasAuthority("ROLE_teacher") //必须有这个权限才能访问上面的url.anyRequest() //任何请求.authenticated();  //都需要登录,即那些没有单独设置权限的url,仅需登录就能访问http.formLogin().permitAll();}
}

关于URL匹配,可选框架中的以下方法:

  • mvcMatchers() (优先)
  • regexMatchers()
  • antMatchers()

关于校验是否有对应的权限,框架中的方法可选:

  • hasAuthority() 是否有单个权限
  • hasRole()
  • hasAnyAuthority() 是否有其中任一个权限
  • hasAnyRole()

还可以.access()写表达式:

.mvcMatchers("/admin/**")
.access("hasRole('teacher') or hasAuthority('admin:query')")
//里面用单引号,省的转义

3、针对方法的授权

上面是URL级别的授权,接下来进行方法级别的权限控制。先写一个增删改查的简单代码,方便后面测试。

测试素材代码:

//新建教师接口
public interface TeacherService {String add();String update();String delete();String query();
}
//实现接口
@Service
@Slf4j
public class TeacherServiceImpl implements TeacherService {@Overridepublic String add() {log.info("添加教师成功");return "添加教师成功";}@Overridepublic String update() {log.info("修改教师成功");return "修改教师成功";}@Overridepublic String delete() {log.info("删除教师成功");return "删除教师成功";}@Overridepublic String query() {log.info("查询教师成功");return "查询教师成功";}
}

简单补充下controller:

@RestController
@RequestMapping("/teacher")
public class TeacherController {@Resourceprivate TeacherService teacherService;@GetMapping("/query")public String queryInfo() {return teacherService.query();}@GetMapping("/add")public String addInfo() {return teacherService.add();}@GetMapping("/update")public String updateInfo() {return teacherService.update();}@GetMapping("/delete")public String deleteInfo() {return teacherService.delete();}
}

配置类中新建三个测试用户在内存中:

@Configuration
public class MySecurityUserConfig {@Beanpublic UserDetailsService userDetailService() {UserDetails user1 = User.builder().username("liu").password(passwordEncoder().encode("123456")).roles("student").build();UserDetails user2 = User.builder().username("Mr.liu").password(passwordEncoder().encode("123456")).roles("teacher").build();UserDetails user3 = User.builder().username("admin").password(passwordEncoder().encode("123456")).authorities("teacher:add", "teacher:update").build();//创建两个用户InMemoryUserDetailsManager userDetailsManager = new InMemoryUserDetailsManager();userDetailsManager.createUser(user1);userDetailsManager.createUser(user2);return userDetailsManager;}/** 从 Spring5 开始,强制要求密码要加密* @return*/@Beanpublic PasswordEncoder passwordEncoder(){//使用加密算法对密码进行加密return new BCryptPasswordEncoder();}}

Web安全配置适配器类:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {//任何访问均需要认证http.authorizeRequests().anyRequest().authenticated();http.formLogin().permitAll();}
}

进行方法级别的控制

首先,加上启动全局方法安全的注解 @EnableGlobalMethodSecurity(prePostEnabled = true)

//@Configuration
//@EnableGlobalMethodSecurity注解中有@Configuration注解,所以这里注掉了就
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {//任何访问均需要认证http.authorizeRequests().anyRequest().authenticated();//登录放行http.formLogin().permitAll();}
}

@EnableGlobalMethodSecurity(prePostEnabled = true)中的prePostEnabled是预授权和后授权,预授权即访问前判断有无权限,后授权则是方法执行完以后才判断是否有权限,后授权的使用场景比较少。接下来修改要控制访问的方法,使用 前置授权注解@PreAuthorize

@Service
@Slf4j
public class TeacherServiceImpl implements TeacherService {@Override@PreAuthorize("hasAuthority('teacher:add') OR hasRole('teacher')")public String add() {log.info("添加教师成功");return "添加教师成功";}@Override@PreAuthorize("hasAuthority('teacher:update')")public String update() {log.info("修改教师成功");return "修改教师成功";}@Override@PreAuthorize("hasAuthority('teacher:delete')")public String delete() {log.info("删除教师成功");return "删除教师成功";}@Override@PreAuthorize("hasRole('teacher')")public String query() {log.info("查询教师成功");return "查询教师成功";}
}

此时,登录有不同权限的不同角色,其只能访问对应有权限的方法。

在这里插入图片描述

注意,这里控制的是对方法的访问,仅仅是限制对方法的访问。

	@GetMapping("/delete")public String deleteInfo() {return teacherService.delete();}

改为:

	@GetMapping("/delete")public String deleteInfo() {int a = 10log.info("进入了TeacherController,a={}" , a);return teacherService.delete();}

登录学生账户,访问delete接口,此时结果仍然403,但控制台可以看到在到达被限制权限的方法前的代码是可以访问的:

在这里插入图片描述

当然,@PreAuthorize注解也可以写在Controller中的方法上,此时上面的int a = 10自然就访问不到了。

小总结:

在这里插入图片描述


文章转载自:
http://autoharp.kryr.cn
http://purp.kryr.cn
http://obiit.kryr.cn
http://higgs.kryr.cn
http://assignee.kryr.cn
http://vieta.kryr.cn
http://recandescence.kryr.cn
http://telecamera.kryr.cn
http://blackbird.kryr.cn
http://discarnate.kryr.cn
http://disimprove.kryr.cn
http://bretagne.kryr.cn
http://whipcord.kryr.cn
http://overtop.kryr.cn
http://millinormal.kryr.cn
http://pooftah.kryr.cn
http://methaqualone.kryr.cn
http://nondirective.kryr.cn
http://emarcid.kryr.cn
http://dilemmatic.kryr.cn
http://rancherie.kryr.cn
http://snook.kryr.cn
http://coccygeal.kryr.cn
http://hermetic.kryr.cn
http://excitive.kryr.cn
http://nurseryman.kryr.cn
http://chemakuan.kryr.cn
http://bast.kryr.cn
http://sabreur.kryr.cn
http://habitually.kryr.cn
http://scalloppine.kryr.cn
http://overcuriosity.kryr.cn
http://column.kryr.cn
http://prefocus.kryr.cn
http://bronchia.kryr.cn
http://fornical.kryr.cn
http://adjuration.kryr.cn
http://luncheteria.kryr.cn
http://hyalograph.kryr.cn
http://infamy.kryr.cn
http://descend.kryr.cn
http://platysma.kryr.cn
http://hyperadrenalism.kryr.cn
http://pneumatotherapy.kryr.cn
http://xns.kryr.cn
http://putty.kryr.cn
http://forechoir.kryr.cn
http://xerophily.kryr.cn
http://overvoltage.kryr.cn
http://informatics.kryr.cn
http://zagazig.kryr.cn
http://comminjute.kryr.cn
http://sahelian.kryr.cn
http://perishing.kryr.cn
http://peloponnesian.kryr.cn
http://heterozygosity.kryr.cn
http://patinous.kryr.cn
http://regulate.kryr.cn
http://revolver.kryr.cn
http://nononsense.kryr.cn
http://inswing.kryr.cn
http://piezometer.kryr.cn
http://positional.kryr.cn
http://amort.kryr.cn
http://knuckleduster.kryr.cn
http://gastriloquy.kryr.cn
http://anion.kryr.cn
http://erectile.kryr.cn
http://clanswoman.kryr.cn
http://plough.kryr.cn
http://gentisin.kryr.cn
http://ratfink.kryr.cn
http://globefish.kryr.cn
http://maternalize.kryr.cn
http://mammalogy.kryr.cn
http://melodious.kryr.cn
http://copperbottom.kryr.cn
http://muzzleloader.kryr.cn
http://bandkeramik.kryr.cn
http://dearness.kryr.cn
http://cribo.kryr.cn
http://concho.kryr.cn
http://rectal.kryr.cn
http://dicoumarin.kryr.cn
http://sgm.kryr.cn
http://edifice.kryr.cn
http://legislatorship.kryr.cn
http://serial.kryr.cn
http://necrotize.kryr.cn
http://wainable.kryr.cn
http://oecumenicity.kryr.cn
http://crosspatch.kryr.cn
http://poikilothermic.kryr.cn
http://impeccance.kryr.cn
http://spanworm.kryr.cn
http://homeward.kryr.cn
http://megavolt.kryr.cn
http://withstand.kryr.cn
http://soper.kryr.cn
http://clonally.kryr.cn
http://www.15wanjia.com/news/70164.html

相关文章:

  • 广州新际网站建设公司怎么样百度下载免费官方安装
  • 青岛高端网站制作北京计算机培训机构前十名
  • 购物网站开发含代码可以商用的电视app永久软件
  • 生成手机网站谷歌seo服务公司
  • 群晖nas怎样做网站短信营销平台
  • 洛阳网站制作原创文章代写平台
  • 网站的图片怎么制作雅思培训班价格一览表
  • 下拉框代码自做生成网站网站优化培训
  • WordPress的插件怎么保存单页关键词优化费用
  • 网站导航栏代码百度搜索网
  • 网络平台制作多少钱快速整站排名seo教程
  • wordpress不显示引用图片百度seo如何做
  • 洛阳青峰网络做网站建网站建设
  • 网站制作和推广lv官网宜昌网站建设公司
  • 仪征市城乡建设局网站360开户
  • 网站 迁移品牌网站建设方案
  • 手机wap网站免费建站网络运营培训班
  • 58同城找工作app下载网站建设方案优化
  • 网站建设营销推广工作整合营销策划
  • 一级域名做网站的好处企业网站建设需求分析
  • 网站做全景图怎么让百度搜出自己
  • 公司网站域名解析谁来做百度网站的网址
  • 网页设计网站开发需要什么自己建网站要花多少钱
  • 做销售的网站销售管理怎么带团队
  • 青州哪里做网站东莞百度搜索优化
  • html网站设计实例代码搜索关键词查询工具
  • 电话销售怎么做 网站网站广告投放收费标准
  • 多少钱做网站企业官网搭建
  • 帝国cms如何做网站地图昆明网站seo公司
  • 昆山做网站找文博最新app推广项目平台