显示导航

365bet地区 Spring Security Core插件自定义身份验证

显示如何使用Spring Security Core插件创建自定义身份验证

s塞尔吉奥·德尔阿莫

365bet地区版本 4.0.1

365bet地区培训

365bet地区培训由创建并积极维护365bet地区框架的人们开发和交付

入门

在本指南中,您将编写自定义身份验证机制Spring Security Core插件允许进行很大程度的定制,接下来我们将探讨

您将需要什么

要完成本指南,您将需要以下内容

  • 花些时间在你手上

  • 体面的文本编辑器或IDE

  • 安装了JDK或更高版本JAVA首页适当配置

如何完成指南

要开始,请执行以下操作

要么

365bet地区指南存储库包含两个文件夹

  • 初始初始项目通常是一个简单的365bet地区应用程序,其中包含一些其他代码,可以帮助您快速入门

  • 完成一个完整的示例它是按照指南中介绍的步骤进行操作并将这些更改应用于文档的结果。初始

要完成指南,请转到初始

  • 光盘进入grails指南grails春季安全核心插件自定义身份验证初始

并按照下一节中的说明进行操作

您可以直接前往完成的例子如果你光盘进入grails指南grails春季安全核心插件自定义身份验证已完成

编写申请

当我们谈论两因素身份验证时,我们经常想到两件事

  • 用户知道的一些信息,例如用户名密码

  • 用户拥有的东西

在西班牙,后者通常会发行一张坐标卡

西班牙方块坐标

用户需要输入用户名密码和座席才能登录其银行

我们要定制Spring Security Core插件在365bet地区应用程序中实现这种登录

首先,我们需要添加Spring Security Core插件作为依赖项

建立gradle
编译'org grails插件春季安全核心BUILD SNAPSHOT'

域类

采用快速入门生成默认的Spring Security Core域类

grails的quickstart演示用户角色

快速入门脚本生成三个域类用户, 角色用户角色建议将密码编码逻辑移到域类之外

由于365bet地区,默认情况下禁用GORM实体中的服务注入

每个用户都将拥有一张坐标卡,因此我们对User域类进行了一些修改

grails应用程序域演示用户groovy
演示进口 常规转换EqualsAndHashCode
进口 常规转换ToString

EqualsAndHashCode包括'用户名')
ToString包括'用户名'includeNames真正includePackage)
 用户 实施 可序列化 {

        私人的 静态的 最后 serialVersionUID1

        短暂的春季安全服务用户名密码布尔值已启用真正
        布尔值accountExpired布尔值帐户被锁定布尔值密码已过期静态的有很多座标安全协调员<角色getAuthorities UserRole findAllByUser这个角色定义 beforeInsertencodePassword定义 更新之前() {
                如果是脏的'密码'encodePassword受保护的 虚空编码密码密码springSecurityService密码编码器springSecurityService编码密码密码密码静态的瞬态'春季安全服务']

        静态的约束密码空白: , 密码: 真正用户名空白: , 独特: 真正
        }

        静态的映射密码: '密码'汽车线真正
        }
}
grails应用程序域演示SecurityCoordinate groovy
演示进口 常规转换CompileStatic

静态编译
 安全协调员 {
    位置静态的属于用户用户

安全控制器

该控制器仅限于具有角色的用户角色客户

365bet地区应用程序控制器演示BankController groovy
演示进口 grails插件springsecurity注解安全

 银行控制器 {

    担保的(['角色客户'])
    定义 指数渲染'欢迎来到您的银行'
    }
}

种子数据

我们将用一些种子数据填充数据库

grails应用服务演示RoleService groovy
演示进口 grails gorm services服务

服务(角色)
接口角色服务角色保存权威角色findByAuthority权威
grails应用程序服务演示UserService groovy
演示进口 grails gorm services服务

服务用户接口UserService用户findByUsername用户名用户保存用户用户
grails应用程序服务演示UserRoleService groovy
演示进口 grails gorm services服务

服务用户角色接口UserRoleService UserRole保存用户用户角色角色
365bet地区应用程序初始化演示BootStrap groovy
演示进口 grails编译器365bet地区CompileStatic

365bet地区CompileStatic
 引导带RoleService roleService UserService userService UserRoleService userRoleService静态的 地图<, 银行卡'一种': '10', '一种': '84', '一种': '93', '一种': '12', '一种': '92',
             '一种': '58', '一种': '38', '一种': '28', '一种': '36', '一种': '02',
             '': '99', '': '29', '': '10', '': '23', '': '33',
             '': '47', '': '58', '': '39', '': '34', '': '18',
             'C': '28', 'C': '05', 'C': '29', 'C': '03', 'C': '94',
             'C': '14', 'C': '41', 'C': '33', 'C': '11', 'C': '39',
             'd': '01', 'd': '49', 'd': '39', 'd': '79', 'd': '53',
             'd': '38', 'd': '17', 'd': '88', 'd': '70', 'd': '12'
            ]

    定义初始化ServletContext清单<当局'角色客户'权威每个权威如果roleService findByAuthority权限roleService保存权限如果userService findByUsername'夏洛克'用户u用户用户名: '夏洛克', 密码: '初级'银行卡每个k v u addToCoordinates安全协调员位置用户u在userService中保存在userRoleService中保存在roleService findByAuthority中'角色客户'))
        }
    }

    定义破坏

自定义登录表格

我们都覆盖LoginController验证gsp每次将用户定向到登录表单时显示一个随机坐标字段

365bet地区应用程序控制器演示LoginController groovy
演示进口 grails config配置
进口 grails核心支持365bet地区ConfigurationAware

 LoginController 延伸grails插件springsecurity LoginController实施365bet地区ConfigurationAware清单<坐标位置定义 认证ConfigObject conf getConf如果springSecurityService isLoggedIn重定向小号conf successHandler defaultTargetUrl返回
        }

        馆藏随机排列坐标位置位置坐标位置第一postUrl请求contextPath conf apf filterProcessesUrl呈现视图: '认证', 模型: [postUrlpostUrlRememberMeParameterconf RememberMe参数usernameParameterconf apf username参数passwordParameterconf apf passwordParametergspLayoutconf gsp layoutAuth位置位置覆写
    虚空setConfiguration Config co CoordinatePositions co getProperty'安全坐标位置', 清单, [])  清单<>

    }
}

我们有一个有效位置列表作为配置列表yml应用程序

grails应用配置会议应用yml
---
安全:
    坐标:
        职位A A A A A A A A A B A B B B B A A B B B C C C C C C C C C C C C C C D D D D D D D D D D D D

覆盖的GSP文件显示坐标位置输入字段

登录
grails应用程序视图登录身份验证gsp


    "布局"内容"${gspLayout'主要'}"/>