grails+spring Security项目demo
来源:互联网 发布:koss sb45淘宝 编辑:程序博客网 时间:2024/06/05 15:20
2.步骤:
(1)新建一个目录并新建一个项目,例如
mkdir Test;cd Test;grails creat-app
稍后,将会需要你输入项目名称,我输入的是TestSecurity
进入项目
cd TestSecurity
(2)选择一个IDE将项目引入,我用的是intellij IDEA,将项目引入之后,我们需要将Spring Security以插件的形式引入进去,此处跟maven中引入jar包的区别不大,至于grails内部做了什么工作我们暂时不用去了解
配置项:1 ---> BulidConfig.grovvy
说明:
grails.project.war.file 此属性配置的是你将要将grails打包文件放在哪个路径,默认的是 grails.project.war.file = "target/${appName}-${appVersion}.war",此处的值可以自己设定,若使用默认值,在你使用grails war命令的时候将会在项目目录下的target目录中生成一个以项目名+version号码组成的war包
grails.project.fork 此处的配置建议全部注释掉,使用test:false,run:false,debug:true三个配置就可以了,当初这个地方的配置导致我的IDEA的debug模式无法进去,如果你也遇到无法进入debug模式,可以先检测这里的配置
dependencies配置 添加compile 'mysql:mysql-connector-java:5.1.6'(数据库连接的jar包)
plugins 配置security插件,在2.3.0以后grails 不支持在命令行引入security插件,这个地方需要注意,不要被老版本的document骗了,这里装插件的方式为在plugins配置项中添加compile ":spring-security-core:2.0-RC2"
注意:上面的操作也许会报错,说找不到插件,所以还需要在repositories配置项中指定远程插件库的地址 mavenRepo 'http://repo.spring.io/milestone'
配置项:2 ---->DataSource.grovvy
1,默认的使用的是内存数据库,就是项目运行的时候创建的一个临时的数据库,我们需要自己配置我们使用的数据库,我使用的是mysql所以有以下的配置将原来的配置覆盖掉
dataSource.driverClassName = "com.mysql.jdbc.Driver"dataSource.dialect = org.hibernate.dialect.MySQLDialectdataSource { properties { maxActive = 40 maxIdle = 40 minIdle = 20 initialSize = 20 minEvictableIdleTimeMillis = 60 * 1000 * 15 timeBetweenEvictionRunsMillis = 60 * 1000 * 15 numTestsPerEvictionRun = 3 testOnBorrow = true testWhileIdle = true testOnReturn = false validationQuery = "SELECT 1" }}
2,grails非常好的地方在于我们可以在一个项目里可以配置不同的环境,测试 ,生产环境只要使用不同的命令就可以将项目运行在不同的环境下
development { dataSource { dbCreate = "validate" // one of 'create', 'create-drop', 'update', 'validate', '' username = "root" password = "itlxh784533" url = "jdbc:mysql://localhost:3306/imdou8?useUnicode=yes&characterEncoding=UTF-8" logSql = true } }
配置项----->config.grovvy
前提准备:创建domain class,初学者建议使用命令s2-quickstart命令创建用户类,权限类,用户权限类
grails s2-quickstart com.yourapp Person Authority Requestmap
完成上面的准备条件后,将会看到项目的domain目录下会生成 Persion Authority PersionAuthority Requestmap四个类,Persion是我们的用户类,Authority是权限类,Requestmap是对应url访问权限类
然后我们就可以来配置config.grovvy了,既然我们用到了Security插件,所以在config.grovvy中就要对插件进行配置,如果前提准备都正常完成的话,我们可以发现config.grovvy中已经默认的生成了一些插件的配置(如果没有特殊的需求,这里就不需要更改了),例如
grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.TestSecurity.Person'grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.TestSecurity.PersonAuthority'grails.plugin.springsecurity.authority.className = 'com.TestSecurity.Authority'grails.plugin.springsecurity.requestMap.className = 'com.TestSecurity.Requestmap'grails.plugin.springsecurity.securityConfigType = "Requestmap"
这些配置是告诉Security,我是用哪个类做用户类,哪个类做权限类的,这些我们都不需要更改,这里要说明的是最后一个配置
grails.plugin.springsecurity.securityConfigType = "Requestmap"
这个配置是告诉Security,用户的请求url的权限是Requestmap类来定义的,也就是用户发起一个请求,是要在数据库中检查这个表,然后根据用户的权限是否和数据库中定义的当前url访问所需要的权限相匹配来决定用户是否有权访问该资源
做完这些,Security的配置基本就完成了,但是我们知道此时,如果我们启动系统,你还没有用户帐号,而且像以前使用Security时的url权限说明和用户权限的说明都是没有数据的,所以,我们需要初始化数据,你可以在数据库中直接写入数据,或者在BootStrap.groovy中初始化系统数据
class BootStrap { def init = { servletContext -> def adminRole = new Authority(authority: 'ROLE_ADMIN').save(flush: true) def userRole = new Authority(authority: 'ROLE_USER').save(flush: true) def testUser = new Person(username: 'me', password: 'password') for (String url in [ '/', '/index', '/index.gsp', 'favicon.ico', 'js*', 'css*', 'images*', '/login', '/login.*', '/login', '/logout', '/logout.*', '/logout']) { new Requestmap(url: url, configAttribute: 'permitAll').save() } new Requestmap(url: '/profile*', configAttribute: 'ROLE_USER').save() new Requestmap(url: '/user/**', configAttribute: 'ROLE_USER').save() new Requestmap(url: '/secure/**', configAttribute: 'ROLE_ADMIN').save() new Requestmap(url: '/admin*', configAttribute: 'ROLE_ADMIN').save() new Requestmap(url: '/admin/role*', configAttribute: 'ROLE_SUPERVISOR').save() new Requestmap(url: '/admin/user*', configAttribute: 'ROLE_ADMIN,ROLE_SUPERVISOR').save() new Requestmap(url: '/j_spring_security_switch_user', configAttribute: 'ROLE_SWITCH_USER,isFullyAuthenticated()').save() testUser.save(flush: true) PersonAuthority.create testUser, adminRole, true /*PersonAuthority.create testUser, userRole, true*/ assert Person.count() == 1 assert Authority.count() == 2 assert PersonAuthority.count() == 1 }}
这是我在grails文档上直接拷过来稍加修改的,也就是配置了我需要访问的路径的权限,系统在启动的时候会将本地数据库中插入这些数据
启动项目,访问设置权限的资源,例如我在上面的初始化设置的用户是'me' 此用户有'ROLE_ADMIN'权限,而我的SecureController的访问权限是需要有‘ROLE_ADMIN’权限的,所以访问SecureController的时候,会跳转到登录页面,登录成功后就会访问到我们期待的资源.
ps:url访问权限是可以配置在config.grovvy中的,只要设置
grails.plugin.springsecurity.securityConfigType = "InterceptUrlMap"
并且设置
grails.plugin.springsecurity.interceptUrlMap = [ '*': ['permitAll'], '/index': ['permitAll'], '/index.gsp': ['permitAll'], 'js*': ['permitAll'], 'css*': ['permitAll'], 'images*': ['permitAll'], 'favicon.ico': ['permitAll'], '*login*': ['permitAll'], '/login/auth': ['permitAll'], '/login*': ['permitAll'], '/logout*': ['permitAll'], '/secure*': ["hasRole('ROLE_USER')"], '/user*//**': ["hasRole('ROLE_USER')"], '/secure*//**': ["hasRole('ROLE_ADMIN')"], ]
这样项目初步就可以跑起来了,下面介绍一下MD5加密
grails推荐的加密方式是'bcrypt' 但是我们可以设置密码MD5加密,步骤如下
1,在config.grovvy中添加如下配置
grails.plugin.springsecurity.password.algorithm = 'MD5'grails.plugin.springsecurity.dao.reflectionSaltSourceProperty = 'username'
algorithm是说明加密方式,我们设定为md5加密
reflectionSaltSourceProperty是说明盐值的,我们设定是用户名,及username
2,更改Persion.grovvy中的encodePassword方法
protected void encodePassword() {password = springSecurityService.encodePassword(password,username)}
重新启动项目,进数据库查看密码格式会发现密码变为MD5加密了
注意:更换项目密码为MD5加密方式的时候最好先将数据库中的表清空,否则可能会发生用户授权表没有数据...
ps : 有什么问题欢迎留言共同探讨
项目war包grails_spring_security
- grails+spring Security项目demo
- Spring Security简单Demo
- spring security简单demo .
- Spring Security入门Demo
- grails 之 Spring Security Core Plugin 使用
- spring security demo入门分析
- spring security登陆认证demo
- Spring Security 项目
- Hacking Custom Authentication Providers with Grails Spring Security
- Grails, spring-security-core plugin:使用email登录
- Grails 之 Acegi Plugin 转移到Spring Security Core Plugin
- 诊断Grails Spring Security Core登录错误的一些方法
- grails之spring-security-core自定义加密方式
- spring boot security的简单学习demo
- 【Spring Security】之一:Eclipse搭建Spring Security项目
- spring security 安全框架remember me,demo学习
- web项目学习之spring-security
- Spring security实战(1)-----项目搭建
- android-Selector
- 代理模式
- servlet过滤器 web.xml配置
- Java ToString用法
- Android 桌面上特定的图标不能被移动和删除
- grails+spring Security项目demo
- 总结C/C++下读取文件大小的方法
- testhello.java
- 作业一
- C++数据类型
- leetcode: ZigZag Conversion
- python(2)import与from...import
- 企业综合管理系统 常见问题
- The min/max problem in C++ and Windows