1. ApplicationResources.groovyでモジュールを宣言
modules = { application { resource url:'js/application.js' } // jQuery mobileのモジュールを宣言 jquerymobile { dependsOn 'jquery' resource url: 'js/jquery.mobile-1.1.0-rc.1.min.js', disposition:'head' resource url: 'css/jquery.mobile-1.1.0-rc.1.min.css' } }jquery.mobile-1.1.0-rc.1.min.jsはweb-app/jsに、jquery.mobile-1.1.0-rc.1.min.cssはweb-app/cssに 画像類はweb-app/css/imagesに配置します。
2. web-app/WEB-INF/sitemesh.xmlに以下のようにexcludes要素を追加します。
<sitemesh> <!-- sitemesh除外 --> <excludes file="/WEB-INF/sitemesh-excludes.xml" /> <page-parsers> <parser content-type="text/html" class="org.codehaus.groovy.grails.web.sitemesh.GrailsHTMLPageParser" /> <parser content-type="text/html;charset=ISO-8859-1" class="org.codehaus.groovy.grails.web.sitemesh.GrailsHTMLPageParser" /> <parser content-type="text/html;charset=UTF-8" class="org.codehaus.groovy.grails.web.sitemesh.GrailsHTMLPageParser" /> </page-parsers> <decorator-mappers> <mapper class="org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper" /> </decorator-mappers> </sitemesh>3. sitemesh-excludes.xmlを以下のように作成し、web-app/WEB-INF/に配置します。
<?xml version="1.0" encoding="UTF-8"?> <sitemesh-excludes> <excludes> <pattern>/*</pattern> </excludes> </sitemesh-excludes>4. Spring Security pluginをインストールし、ユーザやロールなどのドメインクラスを作成します。
grails install-plugin spring-security-core grails s2-quickstart <package> <user domain class> <role domain class>5. 管理者用のユーザを作成するようにBootStrap.groovyに以下のようなコードを追加
import yourpackage.* class BootStrap { def init = { servletContext -> def roleAdmin = Role.findByAuthority("ROLE_ADMIN")?: new Role(authority:"ROLE_ADMIN").save(failOnError:true) def userAdmin = User.findByUsername("admin")?: new User(username: "admin", password: "admin", enabled:true).save(failOnError:true) if (!userAdmin.authorities.contains(roleAdmin)) { UserRole.create userAdmin, roleAdmin, true } } def destroy = { } }6. Config.groovyで以下のコードのようにURLに対してセキュリティを設定します。
import grails.plugins.springsecurity.SecurityConfigType grails.plugins.springsecurity.securityConfigType = SecurityConfigType.InterceptUrlMap grails.plugins.springsecurity.interceptUrlMap = [ '/*':['IS_AUTHENTICATED_FULLY'] ]7. grails-app\views\loginのauth.gspを以下のように変更します。
<%=packageName%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title><g:message code="springSecurity.login.title"/></title> <style type="text/css" media="screen"> /* headerが...で省略されるのを防ぐ */ body .ui-header .ui-title { white-space: normal; margin-left: 0; margin-right: 0; } </style> <!-- jquerymobileを使用 --> <r:require module="jquerymobile"/> <r:layoutResources /> </head> <body> <div data-role="page"> <div data-role="header"> <h1><g:message code="springSecurity.login.header"/></h1> </div> <div data-role="content"> <g:if test='${flash.message}'> <div class='login_message'>${flash.message}</div> </g:if> <form action='${postUrl}' method='POST' id='loginForm' autocomplete='off' data-ajax="false"> <div data-role="fieldcontain"> <label for='username'><g:message code="springSecurity.login.username.label"/>:</label> <input type='text' class='text_' name='j_username' id='username'/> </div> <div data-role="fieldcontain"> <label for='password'><g:message code="springSecurity.login.password.label"/>:</label> <input type='password' class='text_' name='j_password' id='password'/> </div> <div id="remember_me_holder"> <input type='checkbox' class='chk' name='${rememberMeParameter}' id='remember_me' <g:if test='${hasCookie}'>checked='checked'</g:if>/> <label for='remember_me'><g:message code="springSecurity.login.remember.me.label"/></label> </div> <div> <input type='submit' id="submit" value='${message(code: "springSecurity.login.button")}'/> </div> </form> </div> </div> <r:layoutResources /> <script type='text/javascript'> <!-- (function() { document.forms['loginForm'].elements['j_username'].focus(); })(); // --> </script> </body> </html>出力画面
動作環境
grails 2.0.1
関連情報
jQuery mobileのホームページ
http://jquerymobile.com/
0 件のコメント:
コメントを投稿