20130116-使用Grails Shiro Plugin实现身份验证02
来源:互联网 发布:ip网络广播系统破解版 编辑:程序博客网 时间:2024/06/05 09:38
上一篇把Shiro部署到Grails上了,并且可以正常运行,虽然可以使用grails generate-all domain方式生成CRUD的脚手架增加用户或角色,但是出于业务的角度考虑,我们不希望所有人都可以增加用户信息,所以,我们新增加一个注册的功能,供没有账号的人注册自己的个人资料,而有admin权限的人可以登录到系统使用CRUD去维护这些账户信息。
注册
- 现在创建一个SignupController,用来处理注册过程
$grails create-controller com.example.SignupController
- 在Controller中增加注册方法
1 package com.example 2 3 import org.apache.shiro.authc.UsernamePasswordToken 4 import org.apache.shiro.SecurityUtils 5 6 class SignupController { 7 def shiroSecurityService 8 9 def index() {10 User user = new User()11 [user: user]12 }13 14 def register() {15 // Check to see if the username already exists16 def user = User.findByUsername(params.username)17 if (user) {18 flash.message = "User already exists with the username '${params.username}'"19 redirect(action:'index')20 } else { // User doesn't exist with username. Let's create one21 // Make sure the passwords match22 if (params.password != params.password2) {23 flash.message = "Passwords do not match"24 redirect(action:'index')25 } else { // Passwords match. Let's attempt to save the user26 // Create user27 user = new User(username: params.username,passwordHash: shiroSecurityService.encodePassword(params.password))28 29 if (user.save()) {30 // Add USER role to new user31 user.addToRoles(Role.findByName('ROLE_USER'))32 // Login user33 def authToken = new UsernamePasswordToken(user.username, params.password)34 SecurityUtils.subject.login(authToken)35 36 redirect(controller: 'home', action: 'secured')37 }else {}38 }39 }40 }41 }
- 在这个Controller中定义了index和register两个action
- index action用来显示注册界面
- register action处理注册结果,如果注册成功则redirect到HomeController下的secured action
下面增加一个index.gsp界面,当访问http://localhost:8080/shiro-example/home/index时跳转到注册界面
1 <%@ page contentType="text/html;charset=UTF-8"%> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5 <title>Register</title> 6 <meta name="layout" content="main" /> 7 </head> 8 9 <body>10 <h1>Signup</h1>11 <g:if test="${flash.message}">12 <div class="alert alert-info">${flash.message}</div>13 </g:if>14 <g:hasErrors bean="${user}">15 <div class="alert alert-error"><g:renderErrors bean="${user}" as="list" /></div>16 </g:hasErrors>17 18 <g:form action="register">19 <fieldset class="form"><g:render template="register"/></fieldset>20 21 <fieldset class="buttons">22 <g:submitButton name="submit" value="Submit"/>23 </fieldset>24 </g:form>25 26 </body>27 </html>
在这里,使用<g:render template="register"/>引用了一个register模板,grails会去view下的当前gsp文件的相同目录中去找_register.gsp文件。所以,再建一个_register.gsp文件,定义表单内容
1 <%@ page import="com.example.User" %> 2 3 <div class="fieldcontain ${hasErrors(bean: userInstance, field: 'username', 'error')} required"> 4 <label for="username"> 5 <g:message code="user.username.label" default="Username" /> 6 <span class="required-indicator">*</span> 7 </label> 8 <g:textField name="username" required="" value="${userInstance?.username}"/> 9 </div>10 11 <div class="fieldcontain ${hasErrors(bean: userInstance, field: 'passwordHash', 'error')} required">12 <label for="password">Password</label>13 <span class="required-indicator">*</span>14 <g:passwordField name="password" value=""/>15 </div>16 17 <div class="fieldcontain ${hasErrors(bean: userInstance, field: 'passwordHash', 'error')} required">18 <label for="password">Confirm Password</label>19 <span class="required-indicator">*</span>20 <g:passwordField name="password2" value=""/>21 </div>
- 现在访问http://localhost:8080/shiro-example/signup,系统跳转到signup/index注册页面,登记注册信息
- 正常完成后跳转到http://localhost:8080/shiro-example/home/secured,一切正常
- 20130116-使用Grails Shiro Plugin实现身份验证02
- 20130115-使用Grails Shiro Plugin实现身份验证01
- 20130117-使用Grails Shiro Plugin实现身份验证03
- Grails Shiro Plugin之初体验
- 20130121-使用Grails Bootstrap Plugin实现界面美化
- 使用Grails Bootstrap Plugin实现界面美化(作者:NEO)
- grails 之 Spring Security Core Plugin 使用
- 用Shiro实现简单的身份验证
- shiro 身份验证
- shiro 身份验证
- Shiro身份验证
- Shiro身份验证
- shiro身份验证
- Shiro身份验证
- 安全验证框架使用笔记002---Shiro实现基本的身份验证
- Grails, spring-security-core plugin:使用email登录
- grails-shiro权限认证
- Grails Searchable Plugin
- C#如何让子界面显示在父界面本体上
- Android电源管理
- dp之最长公共子序列算法
- 《c和指针》笔记--简洁的单项链表插入操作
- 20130115-使用Grails Shiro Plugin实现身份验证01
- 20130116-使用Grails Shiro Plugin实现身份验证02
- 20130117-使用Grails Shiro Plugin实现身份验证03
- 20130121-使用Grails Bootstrap Plugin实现界面美化
- 20130123-Grails手工增加资源文件
- 20130415-Linux试玩随笔-01-安装vsftp
- 20130415-Linux试玩随笔-02-安装jdk、grails
- 20130419-Linux试玩随笔-03-安装mysql
- 20130426-Linux试玩随笔-04-CentOS安装
- 20130426-常用站点收藏