从零开始java安全权限框架篇(二):spring security实现权限

本文详细介绍了如何使用Spring Security进行权限控制,包括后端验证流程、配置自定义角色权限,以及前端页面权限的显示。重点讲解了数据库动态配置权限、前端页面控制和后端验证的实现,并给出了配置示例和注意事项。
摘要由CSDN通过智能技术生成

目录

一.spring security控制权限

二:后端验证

1.验证流程

2.配置

(1)配置自定义角色权限验证

(2)在config中声明改配置

(3).controller中配置权限

(4)注意点

(5)说明

三:权限控制按钮权限的显示

1.引入依赖

2.页面引入与控制

3.使用标签

4.修改登录方法


一.spring security控制权限

  security的核心功能就是控制权限。这里,我们通过以下几个方面来说明:

  (1)数据库动态配置权限

  (2)前端页面控制(控制按钮或者菜单是否显示)

  (3)后端验证(验证某一个请求是否合法)

 

二:后端验证

1.验证流程

2.配置

(1)配置自定义角色权限验证

  在security中,权限的验证是由PermissionEvaluator来实现的,这里我们需要自定义并集成

package com.config.Seurity.permission;

import java.io.Serializable;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;

import com.config.Seurity.util.UserUtil;
import com.moudle.system.model.Menu;
import com.moudle.system.service.MenuService;

/**
 * 
 * ClassName: 自定义URL拦截 
 * Function: 一句话描述功能. 
 * auth: monxz
 * date: 2019年8月29日 下午7:23:44 
 *
 *
 */
@Component
public class CustomPermissionEvaluator implements PermissionEvaluator{
	
	@Autowired
	private MenuService  menuService;

	/**
	 * 我的url和权限全部放在菜单表中了
	 * TODO 注意这里,我们这里直接加载菜单中URL以及权限,是应为在MenuService中自动过滤掉了相应权限的路径了
	 * @see 
	 */
	@Override
	public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
		
		if(UserUtil.currentUser().getRole().getRoleRange() == 0) {
			return true;
		}
		
		List<Menu> menuList=menuService.findList(new Menu());		
		for(Menu menu:menuList) {
//			if(targetDomainObject.equals(menu.getUrl())  && permission.equals(menu.getParams())) {
//				return true;
//			}
			if( permission.equals(menu.getParams())) {
				return true;
			}
		}
		
		return false;
	}

	@Override
	public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType,
			Object permission) {
		
		// TODO Auto-generated method stub
		return false;
	}

}

(2)在config中声明改配置

package com.config.Seurity.config;



import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.security.web.access.AccessDeniedHandlerImpl;
import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler;
import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;

import com.config.Seurity.hander.AjaxSuccessHander;
import com.config.Seurity.hander.AjaxfailHander;

import com.config.Seurity.permission.CustomPermissionEvaluator;
import com.config.Seurity.pwdEnder.MyPasswordEncoder;
import com.config.Seurity.service.LoginService;

import lombok.extern.slf4j.Slf4j;





/**
 * spring security的配置
 * ClassName: SecurityConfig 
 * Function: 一句话描述功能. 
 * auth: monxz
 * date: 2019年8月28日 上午10:04:50 
 *
 *
 */
@Configuration
@EnableWebS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值