JavaWeb 利用springsecurity做用户权限限制-阿里云开发者社区

开发者社区> 沉默王二> 正文

JavaWeb 利用springsecurity做用户权限限制

简介: JavaWeb 利用springsecurity做用户权限限制
+关注继续查看

JavaWeb 利用springsecurity做用户权限限制。


一、概述


不同的user(用户)需要不同的role(角色),不同的role(角色)又会需要不同的resource(资源权限),比如说我王二,是个管理员(admin),我的权限大到什么都能操作,包括新建一个代理(proxy),再比如说我弟弟王三,是个代理(proxy),他却不能新建代理,他权限不够大。


利用springsecurity来实现的话,就非常简便(当然了,必须先做点准备工作)。


<security:authorize name="newAgentPage">
    <li><a class="add" title="新建代理"><span>新建代理</span></a></li>
</security:authorize>

注释一下:


security是规定的一个taglib前标记。

authorize是规定的一个tld后标记。

name是规定的适配属性。

newAgentPage是规定的权限名字。

二、直观体验


来看看我王二和弟弟王三的操作权限效果:

image.png


三、具体实现


1、添加security前缀


<%@ taglib prefix="security" uri="http://www.springsecurity.org/jsp"%>


2、添加authorize后缀


<?xml version="1.0" encoding="UTF-8" ?>  
<taglib xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
   http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  
    version="2.1">  
    <description>  
    <![CDATA[security Tags]]>  
    </description>  
    <tlib-version>1.0</tlib-version>  
    <short-name>security</short-name>  
    <uri>http://www.springsecurity.org/jsp</uri>  
    <tag>  
        <description>  
        <![CDATA[authorize Tag]]>  
        </description>  
        <name>authorize</name>  
        <tag-class>  
            com.honzh.security.filter.tag.AuthorizeTag
        </tag-class>  
        <body-content>JSP</body-content>  
        <attribute>  
            <name>name</name>  
            <required>false</required>  
            <rtexprvalue>true</rtexprvalue>  
            <type>java.lang.String</type>  
        </attribute>  
    </tag>  
</taglib>

把以上xml内容保存到WebContent/WEB-INF目录下的authorize.tld文件中。

稍作注释:


name标签中authorize就是定义的后缀名。

tag-class标签中为继承BodyTagSupport标记的子类,3小节中介绍。

attribute标签中定义了name属性,用来页面上传递name的value值。

3、AuthorizeTag类

package com.honzh.security.filter.tag;

import java.util.HashMap;
import java.util.List;

import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.log4j.Logger;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import com.honzh.biz.database.entity.security.SecurityUserDto;

public class AuthorizeTag extends BodyTagSupport {
    private static Logger logger = Logger.getLogger(AuthorizeTag.class);

    private static final long serialVersionUID = -5772328723066649929L;

    // 页面上设置的name值
    private String name;

    /*
     * (non-Javadoc)
     * 
     * @see javax.servlet.jsp.tagext.BodyTagSupport#doStartTag()
     */
    @SuppressWarnings("unchecked")
    public int doStartTag() {
        try {
            // 登陆用户的权限对象
            Authentication auth = SecurityContextHolder.getContext().getAuthentication();

            if (auth == null) {
                return SKIP_BODY;
            }

            // 封装了一系列便捷信息的登陆用户
            SecurityUserDto securityUserDto = (SecurityUserDto) auth.getPrincipal();

            // 匹配用户是否具有该权限
            List<HashMap<String, String>> resources = securityUserDto.getResources();
            for (HashMap<String, String> resource : resources) {
                if (resource.get("name").equals(this.getName())) {
                    return EVAL_BODY_INCLUDE;
                }
            }

        } catch (Exception e) {
            logger.error(e.getMessage());
            logger.error(e.getMessage(), e);
        }

        return SKIP_BODY;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

稍作介绍:


对于BodyTagSupport 类,你可以参照自定义jsp标签: TagSupport与BodyTagSupport的区别 (转),了解一下类方法介绍,以及常量作用。

SecurityUserDto 类是针对我项目封装的用户权限类,主要作用就是获取登陆用户的角色,角色对应的权限,限于篇幅,本篇只做简单的介绍。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9494 0
JavaWeb 利用springsecurity做用户权限限制
JavaWeb 利用springsecurity做用户权限限制
10 0
JavaWeb 利用springsecurity做用户权限限制
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/50184583 JavaWeb 利用springsecurity做用户权限限制。
1096 0
java BigInteger 对权限进行2的权的和计算
java BigInteger 对权限进行2的权的和计算
68 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13180 0
访问权限进修课-protected | 带你学《Java面向对象编程》之七十
本节将为读者巩固访问控制权限方面的相关知识,并结合实例着重讲解了protected权限的作用。
333 0
Spring MVC使用拦截器实现权限控制
1、首先准备对应的架包 2、看看项目的架构 3、基本的web.xml文件 shiro SpringMVC org.
887 0
【shiro】2.spring整合shiro,注解控制shiro用户/角色/权限And/OR,没有权限跳转到固定页面
这几天粗浅的把shiro整合到spring中,并且注解控制shiro用户/角色/权限And/OR 步骤: 1.首先maven搭建web项目 2.创建数据库 user/role/authority 其中,role->user是一对多,role->authority是多对多 shiros.
9122 0
+关注
沉默王二
微信搜索「沉默王二」,回复关键字「00」获取硬核计算机基础资料。
1084
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载