当前位置:网站首页>Ruoyi interface permission verification
Ruoyi interface permission verification
2022-07-03 06:29:00 【xuhss_ com】
High quality resource sharing
| Learning route guidance ( Click unlock ) | Knowledge orientation | Crowd positioning |
|---|---|---|
| 🧡 Python Actual wechat ordering applet 🧡 | Progressive class | This course is python flask+ Perfect combination of wechat applet , From the deployment of Tencent to the launch of the project , Create a full stack ordering system . |
| Python Quantitative trading practice | beginner | Take you hand in hand to create an easy to expand 、 More secure 、 More efficient quantitative trading system |
This article belongs to ruoyi Project practice series
ruoyi In the front end, the system dynamically displays directories and buttons mainly through whether permission characters are included or not . To prevent passage http Request to bypass permission restrictions , The back-end interface also needs to be designed with relevant permissions .
@PreAuthorize Use
Due to @PreAuthorize The principle is not well understood , So here is only a brief explanation in ruoyi How the project is applied .
Before requesting to call the interface , By @preAuthorize The annotated interface needs to be validated first . Via annotation parameters value() Return value true and false To determine whether you have permission .
public @interface PreAuthorize {
String value();
}
Ruoyi Not using native Spel expression , It's using custom PermissionService class , Through which custom methods hasPermi(String Permission) To judge the authority . Use examples of annotations :@PreAuthorize("@ss.hasPermi('system:menu:list')")
public boolean hasPermi(String permission)
{
if (StringUtils.isEmpty(permission))// With annotations, there must be permission value
{
return false;
}
LoginUser loginUser = SecurityUtils.getLoginUser();
if (StringUtils.isNull(loginUser) ||
CollectionUtils.isEmpty(loginUser.getPermissions()))
{
return false;
}
return hasPermissions(loginUser.getPermissions(), permission);
private boolean hasPermissions(Set permissions, String permission)
{
return permissions.contains(ALL_PERMISSION) ||
permissions.contains(StringUtils.trim(permission)); // Determine whether to hold " All permissions ” character , Or hold the permission
}
Interface permission verification process
Use two examples to explain how the front-end request passes through the back-end interface permission verification .
Login Anonymous request

- Login The request path is
/login, In the filter chainAnnoymousAuthenticationFilterAdd anonymousauthenticationTo Spring In the context . because/loginRequest inSecurityConfig.javaSet anonymous request in , So we can successfully reachSysLoginController. - call
SysLoginService.loginMethod , A key line of command :
Authentication authentication = authenticationManager
.authenticate(new UsernamePasswordAuthenticationToken(username, password));
authenticationManager.authenticate() It's the hook method , stay AbstractUserDetailsAuthenticationProvider To realize , According to the incoming token Type to automatically select , here UsernamePasswordAuthenticationToken Will be made by DaoAuthenticationProvider To deal with it ( If you are not clear, you can set two breakpoints before and after to see the call stack ).
3. stay DaoAuthenticationProvider You can see the key line in :
UserDetails loadedUser = this.getUserDetailsService()
.loadUserByUsername(username);
This will invoke our custom implementation UserDetailsServiceImpl#loadUserByUsername Method ( As shown in the flow chart ), get user Information . As for why you use custom methods , Because in SecurityConfig.java Configured in
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
}
- Generate token, Then return .
Logged in request
The logged in request process is simple , In the flow chart some filters It will be customized JwtAuthenticationFilter, It will pass token get user Information , And then load Spring The context of , Easy to extract and use .
Once tangled with the point of stepping on the pit
Due to SpringSecurity Relatively unfamiliar , Although powerful , But its complexity is also greatly improved , So while debugging the project, I read many introductory blog posts , All of them mentioned UsernamePasswordAuthenticationFilter, However, I did not see the call of this filter during repeated debugging in the actual project .
reason :Security Configuration files need to be added httpSecurity.formLogin() Enable form login to use this filter. View all... Used by the project filter You can use the following test code :
class RuoYiApplicationTest {
@Autowired
private FilterChainProxy filterChainProxy;
@Test
public void test() {
List filterChains = filterChainProxy.getFilterChains();
for(SecurityFilterChain sfc:filterChains){
for(Filter filter:sfc.getFilters()){
System.out.println(filter.getClass().getName());
}
}
}
}
边栏推荐
- Fluentd is easy to use. Combined with the rainbow plug-in market, log collection is faster
- Support vector machine for machine learning
- SSH link remote server and local display of remote graphical interface
- Redis cluster creation, capacity expansion and capacity reduction
- Merge and migrate data from small data volume, sub database and sub table Mysql to tidb
- Luogu problem list: [mathematics 1] basic mathematics problems
- 远端rostopic的本地rviz调用及显示
- Project summary --04
- 数值法求解最优控制问题(一)——梯度法
- 【无标题】8 简易版通讯录
猜你喜欢

Project summary --04

Example of joint use of ros+pytoch (semantic segmentation)

Kubesphere - build MySQL master-slave replication structure

Click cesium to obtain three-dimensional coordinates (longitude, latitude and elevation)

Zhiniu stock project -- 05

Read blog type data from mysql, Chinese garbled code - solved

Yolov3 learning notes
![[5g NR] UE registration process](/img/e3/f881d51fba03010de8c45ea480f3f0.png)
[5g NR] UE registration process

有意思的鼠标指针交互探究

Une exploration intéressante de l'interaction souris - pointeur
随机推荐
Zhiniu stock -- 03
Advanced technology management - do you know the whole picture of growth?
Create your own deep learning environment with CONDA
Selenium ide installation recording and local project maintenance
2022 cisp-pte (III) command execution
Phpstudy setting items can be accessed by other computers on the LAN
How to scan when Canon c3120l is a network shared printer
【C#/VB.NET】 将PDF转为SVG/Image, SVG/Image转PDF
Common interview questions
Cesium Click to obtain the longitude and latitude elevation coordinates (3D coordinates) of the model surface
代码管理工具
ruoyi接口权限校验
POI dealing with Excel learning
Mysql database binlog log enable record
Kubesphere - build Nacos cluster
JMeter linked database
After the Chrome browser is updated, lodop printing cannot be called
[set theory] equivalence relation (concept of equivalence relation | examples of equivalence relation | equivalence relation and closure)
In depth analysis of kubernetes controller runtime
Project summary --2 (basic use of jsup)