grails-shiro权限认证

一.引用shiro插件

//在BuildConfig的plugins下面添加
compile ":shiro:1.2.1"

二.引用新插件后要进行编译

//grails命令
compile

三.生成脚手架文件

//grials命令 , 要注意的是后面的那个点,否则生成好的文件会混乱
shiro-quick-start --prefix=com.security.

四.配置Bootstrap.groovy

class BootStrap {

    def shiroSecurityService

    def init = { servletContext ->
        // Create the admin role
        def adminRole = Role.findByName(‘ROLE_ADMIN‘) ?:
                new Role(name: ‘ROLE_ADMIN‘).save(flush: true, failOnError: true)

        // Create the user role
        def userRole = Role.findByName(‘ROLE_USER‘) ?:
                new Role(name: ‘ROLE_USER‘).save(flush: true, failOnError: true)

        // Create an admin user
        def adminUser = User.findByUsername(‘admin‘) ?:
                new User(username: "admin",
                passwordHash: shiroSecurityService.encodePassword(‘password‘))
                .save(flush: true, failOnError: true)

        // Add roles to the admin user
        assert adminUser.addToRoles(adminRole)
        .addToRoles(userRole)
        .save(flush: true, failOnError: true)

        // Create an standard user
        def standardUser = User.findByUsername(‘joe‘) ?:
                new User(username: "joe",
                passwordHash: shiroSecurityService.encodePassword(‘password‘))
                .save(flush: true, failOnError: true)

        // Add role to the standard user
        assert standardUser.addToRoles(userRole)
        .save(flush: true, failOnError: true)

    }
    def destroy = {
    }
}

五.增加一个Controller

package com.security

class HomeController {

    def index() {
        render ("此页面不需要登陆")
    }
    def secured() {
        render ("此页面需要用户或者管理员登陆")
    }
    def admin() {
        render ("此页面需要管理员登陆")
    }
}

六.修改com.security.SecurityFilters.groovy

package com.security

/**
 * Generated by the Shiro plugin. This filters class protects all URLs
 * via access control by convention.
 */
class SecurityFilters {
    def filters = {
        //1.role_admin
        home(controller: "home",action: "admin"){
            before = {
                accessControl{
                    role("ROLE_ADMIN");
                }
            }
        }
        //2.role_user
        home_securied(controller: "home",action: "secured"){
            before = {
                accessControl{
                    role("ROLE_USER");
                }
            }
        }
    }
}

这里使用的是shiroPlugin提供的accessControl,role方法会划横线,这里是不影响程序运行的,

使用 role( …… ),验证访问对象是否具有相应的角色;

使用 permission( …… ),验证访问对象是否具有相应的 Permission。

这里没有使用shiro的Tag但是也做一点称述

下是经常使用到的 Tag:

  • principal,输出当前用户的标识
  • hasRole,判断当前用户是否属于给定的角色,参数:name
  • hasPermission, 判断当前用户是否具有指定的权限,参数:type,action 或者 permission
  • isLoggedIn,判断当前用户是否已经登录
  • hasAnyRole,判断当前用户是否属于给定的某个角色,参数:in

使用方式

<shiro:hasPermission permission="home:index,admin">
   <span class="button">
 <g:actionSubmit class="edit" value="Edit" />
 </span>
   <span class="button">
 <g:actionSubmit class="delete"
 onclick="return confirm(‘Are you sure?‘);"
 value="Delete" />
 </span>
 </shiro:hasPermission>
时间: 2024-11-09 05:40:07

grails-shiro权限认证的相关文章

Shiro权限认证

   一.权限认证核心要素 权限认证顾名思义,就是在应用系统中,控制谁能访问哪些资源.核心要素有仨:权限.角色.用户 权限:即操作资源的权利,如访问某个url,对某个模块数据进行增删改查 角色:权限的集合,一种角色可以包含多种权限.例如操作员角色可查看系统账单.进行结账操作多种权限. 用户:也就是身份认证中提到的subject一角. 二.授权 shiro授权的方式通常有三种: 1.编程式授权:在代码中进行授权操作,可基于角色和权限两种方式. 2.注解式授权:使用注解对方法或类进行授权,标注该类可

shiro 权限认证的原理,个人的理解

1.对有没有访问权限的理解.  我们这里要对系统中的 角色组.角色.用户.功能 之间的关系要理清楚,http://blog.csdn.net/baicp3/article/details/45028013方便下面用户是否具有某一url的访问. 我们看shiro的配置文件,所以的请求都是需要用户登录的 因而用户 在登录成功时候,shiro已经把该用户是否有访问某一url的权限已经判断好了. 看下面简单的代码 @Override protected AuthorizationInfo doGetAu

springMVC集成shiro权限认证框架,登录之后退出登录出现登录不上的问题

有两种解决方式: 1.在web.xml文件配置一段欢迎页面: <welcome-file-list> <welcome-file>/index.do</welcome-file> </welcome-file-list> 2.在自定义表单过滤器MyFormAuthenticationFilter里,添加清除shiro 在sesion存储的上一次访问地址 shiroSavedReques 1 package cn.zj.logistic.shiro; 2 3

shiro权限认证Realm的四大用法

一.SimpleAccountRealm public class AuthenticationTest { SimpleAccountRealm sar=new SimpleAccountRealm(); @Before public void addUser() { sar.addAccount("mark", "123456","admin","user"); } @Test public void testAuthen

Spring Boot Shiro 权限管理 【转】

http://blog.csdn.net/catoop/article/details/50520958 主要用于备忘 本来是打算接着写关于数据库方面,集成MyBatis的,刚好赶上朋友问到Shiro权限管理,就先总结下发出来了. 使用Shiro之前用在spring MVC中,是通过XML文件进行配置. 既然现在在写Spring Boot的帖子,就将Shiro应用到Spring Boot中,我本地已经完成了SpringBoot使用Shiro的实例,将配置方法共享一下. 先简单介绍一下Shiro,

十、 Spring Boot Shiro 权限管理

使用Shiro之前用在spring MVC中,是通过XML文件进行配置. 将Shiro应用到Spring Boot中,本地已经完成了SpringBoot使用Shiro的实例,将配置方法共享一下. 先简单介绍一下Shiro,对于没有用过Shiro的朋友,也算是做个简介吧. Shiro是Apache下的一个开源项目,我们称之为Apache Shiro.它是一个很易用与Java项目的的安全框架,提供了认证.授权.加密.会话管理,与 Spring Security 一样都是做一个权限的安全框架,但是与S

Shiro身份认证、盐加密

目的: Shiro认证 盐加密工具类 Shiro认证 1.导入pom依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.s

Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:<跟我学Shiro>系列教程.但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特性介绍地非常全面详细,但是整个教程的叙述方式还是有很大缺陷的.文章与文章之间并没有很好地串联起来,每篇文章介绍的东西都过于分散了,如果是对shiro完全不了解的新手来看的话完全是一场噩梦.就像一个网友评价的这样: 看了看这个教程,看完之后都想放弃shiro了,完全看不懂,后来百度了很多别的资料才理解了sh

shiro中基于注解实现的权限认证过程

授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限. 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限等等. 一.用户权限模型 为实现一个较为灵活的用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示. 用户信息用 LoginAccount 表示,最简单的用户信息可能只包含用户名 loginName 及密码 password 两个属性.实际应用中可能会包含用户是否被禁用,用户信息是否过期等信息. 用户权限信息用 Role 与 Per

【Shiro】Apache Shiro架构之权限认证(Authorization)

上一篇博文总结了一下Shiro中的身份认证,本文主要来总结一下Shiro中的权限认证(Authorization)功能,即授权.如下: 本文参考自Apache Shiro的官方文档:http://shiro.apache.org/authorization.html. 本文遵循以下流程:先介绍Shiro中的权限认证,再通过一个简单的实例来具体说明一下API的使用(基于maven). 1. 权限认证的核心要素 权限认证,也就是访问控制,即在应用中控制谁能访问哪些资源.在权限认证中,最核心的三个要素