zoukankan      html  css  js  c++  java
  • java常用的逻辑

    /**
    * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
    * <p>
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    * <p>
    * http://www.apache.org/licenses/LICENSE-2.0
    * <p>
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    package com.stylefeng.guns.core.beetl;

    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.subject.Subject;
    import org.beetl.core.GroupTemplate;

    import com.stylefeng.guns.core.shiro.ShiroUser;

    public class ShiroExt {
    private static final String NAMES_DELIMETER = ",";

    /**
    * 获取当前 Subject
    *
    * @return Subject
    */
    protected static Subject getSubject() {
    return SecurityUtils.getSubject();
    }

    /**
    * 获取封装的 ShiroUser
    *
    * @return ShiroUser
    */
    public ShiroUser getUser() {
    if (isGuest()) {
    return null;
    } else {
    return (ShiroUser) getSubject().getPrincipals().getPrimaryPrincipal();
    }
    }

    /**
    * 验证当前用户是否属于该角色?,使用时与lacksRole 搭配使用
    *
    * @param roleName 角色名
    * @return 属于该角色:true,否则false
    */
    public boolean hasRole(String roleName) {
    return getSubject() != null && roleName != null
    && roleName.length() > 0 && getSubject().hasRole(roleName);
    }

    /**
    * 与hasRole标签逻辑相反,当用户不属于该角色时验证通过。
    *
    * @param roleName 角色名
    * @return 不属于该角色:true,否则false
    */
    public boolean lacksRole(String roleName) {
    return !hasRole(roleName);
    }

    /**
    * 验证当前用户是否属于以下任意一个角色。
    *
    * @param roleNames 角色列表
    * @return 属于:true,否则false
    */
    public boolean hasAnyRoles(String roleNames) {
    boolean hasAnyRole = false;
    Subject subject = getSubject();
    if (subject != null && roleNames != null && roleNames.length() > 0) {
    for (String role : roleNames.split(NAMES_DELIMETER)) {
    if (subject.hasRole(role.trim())) {
    hasAnyRole = true;
    break;
    }
    }
    }
    return hasAnyRole;
    }

    /**
    * 验证当前用户是否属于以下所有角色。
    *
    * @param roleNames 角色列表
    * @return 属于:true,否则false
    */
    public boolean hasAllRoles(String roleNames) {
    boolean hasAllRole = true;
    Subject subject = getSubject();
    if (subject != null && roleNames != null && roleNames.length() > 0) {
    for (String role : roleNames.split(NAMES_DELIMETER)) {
    if (!subject.hasRole(role.trim())) {
    hasAllRole = false;
    break;
    }
    }
    }
    return hasAllRole;
    }

    /**
    * 验证当前用户是否拥有指定权限,使用时与lacksPermission 搭配使用
    *
    * @param permission 权限名
    * @return 拥有权限:true,否则false
    */
    public boolean hasPermission(String permission) {
    return getSubject() != null && permission != null
    && permission.length() > 0
    && getSubject().isPermitted(permission);
    }

    /**
    * 与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过。
    *
    * @param permission 权限名
    * @return 拥有权限:true,否则false
    */
    public boolean lacksPermission(String permission) {
    return !hasPermission(permission);
    }

    /**
    * 已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。与notAuthenticated搭配使用
    *
    * @return 通过身份验证:true,否则false
    */
    public boolean authenticated() {
    return getSubject() != null && getSubject().isAuthenticated();
    }

    /**
    * 未认证通过用户,与authenticated标签相对应。与guest标签的区别是,该标签包含已记住用户。。
    *
    * @return 没有通过身份验证:true,否则false
    */
    public boolean notAuthenticated() {
    return !authenticated();
    }

    /**
    * 认证通过或已记住的用户。与guset搭配使用。
    *
    * @return 用户:true,否则 false
    */
    public boolean isUser() {
    return getSubject() != null && getSubject().getPrincipal() != null;
    }

    /**
    * 验证当前用户是否为“访客”,即未认证(包含未记住)的用户。用user搭配使用
    *
    * @return 访客:true,否则false
    */
    public boolean isGuest() {
    return !isUser();
    }

    /**
    * 输出当前用户信息,通常为登录帐号信息。
    *
    * @return 当前用户信息
    */
    public String principal() {
    if (getSubject() != null) {
    Object principal = getSubject().getPrincipal();
    return principal.toString();
    }
    return "";
    }

    public static void main(String[] args) {
    GroupTemplate gt = new GroupTemplate();
    gt.registerFunctionPackage("shiro", new ShiroExt());

    }
    }

  • 相关阅读:
    python做一个数独小游戏
    通过进程快照枚举进程的信息
    单向链表 malloc与free
    指针常量&指向常量的指针
    变量在不同区域的默认初始值
    数组指针和指针数组
    堆的首地址和堆的指针
    创建对象时,系统会自动调用构造函数和析构函数
    对象所占内存的大小与首地址
    范磊 C++ 第8章 指针
  • 原文地址:https://www.cnblogs.com/zengxiangcai/p/9276878.html
Copyright © 2011-2022 走看看