您的位置:首页 > 编程语言 > Java开发

Spring-Security笔记11 velocity 和spring-security整合 控制界面上元素的显示

2018-03-01 16:30 260 查看
1、在toolbox.xml中加入 <tool>
<key>security</key>
<scope>request</scope>
<class>com.fhzz.core.utils.SecurityVelocity</class>
</tool>

2、编写自定义的SecurityVelocitypackage com.fhzz.core.utils;

import java.util.Collection;
import java.util.Iterator;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;

/**
* @author YangYi
*
*/
public class SecurityVelocity {
public boolean hasAnyRole(String... roles) {
return isRole(roles);
}

/***
* 前端传入数组参数
*
* @param viewRole
* 可变数组 1个或者多个
* @return 是否有权限
*/
private boolean isRole(String... roles) {
/** 前端数组为空 */
if (null == roles || roles.length <= 0) {
return false;
}
/** 获取当前用户登录对象 */
UserDetails userDetails = null;
try {
userDetails = (UserDetails) SecurityContextHolder.getContext()
.getAuthentication().getPrincipal();
} catch (Exception e) {
return false;
}
if (null == userDetails) {
return false;
}
/** 获取当前用户登录对象所有权限 */
Collection<? extends GrantedAuthority> authorities = userDetails
.getAuthorities();
if (null == authorities) {
return false;
}
boolean flag = false;
Iterator<? extends GrantedAuthority> iter = authorities.iterator();
while (iter.hasNext()) {
GrantedAuthority grantedAuthority = iter.next();
/** 遍历前端列表的所有角色 */
for (String vr : roles) {
if (vr.equals(grantedAuthority.getAuthority())) {
flag = true;
break;
}
}
if (flag)
break; // 已经匹配上角色了则不再需要匹配其它角色。
}
return flag;
}

}
3、界面上的控制#if($security.hasAnyRole("AUTH_TO_INDEX"))
<p>您能看到这行字,表示拥有AUTH_TO_INDEX权限</p>
#end
#if(!$security.hasAnyRole("AUTH_SUPER"))
<p>您能看到这行字,表示没有AUTH_SUPER权限</p>
#end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: