6月28
今天在项目中发现一个问题:使用shiro的时候,虽然隐藏掉了一些菜单,但是当我们通过get请求直接访问菜单的时候还是会访问到,也就是shiro可以在界面实现隐藏一些信息,但是没有真正的根据权限码验证请求,于是想自己在后台实现验证。
需求:有权限(权限码是systemmanager:settings)的人可以点击系统设置跳转到系统设置页面,没权限的人看不到菜单,但是通过get访问可以访问到,于是需要在后台拦截。
实现思路:在需要精确验证的方法开始先验证权限,如果验证成功啥也不做,验证失败的话就抛出一个没有权限的异常。在拦截器中捕捉到异常就记录日志,并返回到提醒页面。
1. 验证Shiro权限的工具类(此工具还可以进一步完善,封装为判断是否有指定角色,或者有任意角色)
package com.microxiang.common.util;
import com.microxiang.common.constant.ResultCode;
import com.microxiang.common.exception.user.NoPermissionException;
import com.microxiang.common.system.vo.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
/**
* 验证shiro权限的工具类
*
* @author jiangjun
*/
@Slf4j
public class ShiroPermissionUtils {
private ShiroPermissionUtils() {
}
/**
* 检查当前用户是否有权限(任意一项)
*
* @param permissionCodes 任意权限
* @throws NoPermissionException
*/
public static void checkPermissionAny(String... permissionCodes) {
if (permissionCodes == null || permissionCodes.length == 0) {
return;
}
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
for (String permission : permissionCodes) {
boolean permitted = currentUser.isPermitted(permission);// 判断是否有权限
if (permitted) {
return;
}
}
// 没权限就抛出一个异常
Object principal = currentUser.getPrincipal();
if (principal instanceof LoginUser) {
LoginUser user = (LoginUser) principal;
log.error("user {} no permission !", user.getUsername());
}
throw new NoPermissionException("user no permission !");
}
/**
* 检查当前用户是否有权限(所有的)
*
* @param permissionCodes 任意权限
* @throws NoPermissionException
*/
public static void checkPermissionAll(String... permissionCodes) {
if (permissionCodes == null || permissionCodes.length == 0) {
return;
}
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
for (String permission : permissionCodes) {
boolean permitted = currentUser.isPermitted(permission);// 判断是否有权限
if (!permitted) {
// 没权限就抛出一个异常
Object principal = currentUser.getPrincipal();
if (principal instanceof LoginUser) {
LoginUser user = (LoginUser) principal;
log.error("user {} no permission !", user.getUsername());
}
throw new NoPermissionException("no permission ");
}
}
}
}
需求:有权限(权限码是systemmanager:settings)的人可以点击系统设置跳转到系统设置页面,没权限的人看不到菜单,但是通过get访问可以访问到,于是需要在后台拦截。
实现思路:在需要精确验证的方法开始先验证权限,如果验证成功啥也不做,验证失败的话就抛出一个没有权限的异常。在拦截器中捕捉到异常就记录日志,并返回到提醒页面。
1. 验证Shiro权限的工具类(此工具还可以进一步完善,封装为判断是否有指定角色,或者有任意角色)
package com.microxiang.common.util;
import com.microxiang.common.constant.ResultCode;
import com.microxiang.common.exception.user.NoPermissionException;
import com.microxiang.common.system.vo.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
/**
* 验证shiro权限的工具类
*
* @author jiangjun
*/
@Slf4j
public class ShiroPermissionUtils {
private ShiroPermissionUtils() {
}
/**
* 检查当前用户是否有权限(任意一项)
*
* @param permissionCodes 任意权限
* @throws NoPermissionException
*/
public static void checkPermissionAny(String... permissionCodes) {
if (permissionCodes == null || permissionCodes.length == 0) {
return;
}
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
for (String permission : permissionCodes) {
boolean permitted = currentUser.isPermitted(permission);// 判断是否有权限
if (permitted) {
return;
}
}
// 没权限就抛出一个异常
Object principal = currentUser.getPrincipal();
if (principal instanceof LoginUser) {
LoginUser user = (LoginUser) principal;
log.error("user {} no permission !", user.getUsername());
}
throw new NoPermissionException("user no permission !");
}
/**
* 检查当前用户是否有权限(所有的)
*
* @param permissionCodes 任意权限
* @throws NoPermissionException
*/
public static void checkPermissionAll(String... permissionCodes) {
if (permissionCodes == null || permissionCodes.length == 0) {
return;
}
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
for (String permission : permissionCodes) {
boolean permitted = currentUser.isPermitted(permission);// 判断是否有权限
if (!permitted) {
// 没权限就抛出一个异常
Object principal = currentUser.getPrincipal();
if (principal instanceof LoginUser) {
LoginUser user = (LoginUser) principal;
log.error("user {} no permission !", user.getUsername());
}
throw new NoPermissionException("no permission ");
}
}
}
}
6月17
如何怎么能把QQ昵称加上2020,²º²º上标小字符?? (QQ昵称右上角加数字2020)经常有很多人在这个问题,所以分享下。
²º²º复制上去就可以了
⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉
用什么输入法可以打出 怎么_如何能把QQ昵称加上2020有右上标小字符?右上角标小字²º²º
怎么_如何能把QQ昵称加上²º²º有右上标小字符?右上角标小字²º²º,QQ昵称右上角小数字怎么打出来
怎么能把QQ昵称加上2020上标小字符?_微信昵称上面的小字和数字(上标或下标)是怎么弄出来的
搜狗输入只有01234这几个特殊上标符号,怎么办?有其他输入方式吗? 怎样给你的QQ昵称加上标小字2020
²º²º复制上去就可以了
⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉
用什么输入法可以打出 怎么_如何能把QQ昵称加上2020有右上标小字符?右上角标小字²º²º
怎么_如何能把QQ昵称加上²º²º有右上标小字符?右上角标小字²º²º,QQ昵称右上角小数字怎么打出来
怎么能把QQ昵称加上2020上标小字符?_微信昵称上面的小字和数字(上标或下标)是怎么弄出来的
搜狗输入只有01234这几个特殊上标符号,怎么办?有其他输入方式吗? 怎样给你的QQ昵称加上标小字2020





