验证登录用户账密

1、文档说明

在开发中需要验证某SAP用户的账密来执行某些操作。具体就是指,当使用某个操作时,需要输入账号密码进行校验,此校验和登录时的校验是一致的,也具备多次校验错误后的账户锁定。

本文档将通过代码示例,实现账密校验功能

2、实现过程

首先画出用于输入账密的屏幕,下一个Dynpro置空

 布局中画上输入框

逻辑流

为了能在屏幕中输错账密后再次输入,可以通过循环输出屏幕,校验通过后退出循环

本实例中还校验了账号维护的全称是否完整

可以通过SU01进行维护

执行效果如下

输入密码回车或点击按钮

错误效果

成功则直接关闭当前屏幕,执行后续操作

3、参考代码

TABLES:rc70d.

DATA:gv_sign_result TYPE char1,
     gv_screen_keep TYPE char1. "保持弹框

DATA:r_ucomm   LIKE sy-ucomm,
     ok_code   TYPE sy-ucomm,
     save_code TYPE sy-ucomm.

"调用弹框输入密码校验
gv_screen_keep = 'X'.
WHILE gv_screen_keep IS NOT INITIAL.
  CALL SCREEN 9000 STARTING AT 10 1.
ENDWHILE.

IF gv_sign_result = 'S'.
  MESSAGE '校验成功' TYPE 'S'.
ENDIF.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'PW_ENTER'.
  SET TITLEBAR '001'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INIT_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_9000 OUTPUT.
  CLEAR:gv_sign_result.
  CLEAR:rc70d-signer,rc70d-password,rc70d-reason_ktxt.
  rc70d-signer = sy-uname.
  rc70d-sign_reason = 'XX签名'.
  SET CURSOR FIELD 'RC70D-PASSWORD'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  INPUT_CHECK  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE input_check INPUT.
  DATA: l_user_address TYPE addr3_val.

  IF ok_code <> 'EESC'.
    CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
      EXPORTING
        user_name              = rc70d-signer
      IMPORTING
        user_address           = l_user_address
      EXCEPTIONS
        user_address_not_found = 1
        OTHERS                 = 2.
    IF sy-subrc <> 0.
*     User nicht gefunden oder nicht vollständig gepflegt.
      CLEAR rc70d-signer.
      CLEAR rc70d-password.
      CLEAR rc70d-full_name.
*      MESSAGE e259(sig) WITH rc70d-signer.
      MESSAGE i259(sig) WITH rc70d-signer.
*      g_error-user_address_not_found = c_no_user.
      SET SCREEN 0.
      LEAVE SCREEN.
*      EXIT.
    ELSE.
      IF ( NOT l_user_address-name_first IS INITIAL AND
           NOT l_user_address-name_last  IS INITIAL ).
        CONCATENATE l_user_address-name_last l_user_address-name_first
         INTO rc70d-full_name SEPARATED BY space.
      ELSE.
*    User nicht gefunden oder nicht vollständig gepflegt.
        CLEAR rc70d-signer.
        CLEAR rc70d-password.
        CLEAR rc70d-full_name.
*        MESSAGE e257(sig) WITH rc70d-signer.
        MESSAGE i257(sig) WITH rc70d-signer.
*        g_error-user_address_not_found = c_no_fullname.
        SET SCREEN 0.
        LEAVE SCREEN.
*        EXIT.
      ENDIF.
    ENDIF.
  ENDIF.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.

  DATA: lt_row  TYPE lvc_t_row,
        lt_roid TYPE lvc_t_roid,
        ls_row  TYPE lvc_s_row.

  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN 'EESC'."设置功能键返回按钮单击事件
      CLEAR:gv_screen_keep.
      MESSAGE '用户取消操作' TYPE 'S' DISPLAY LIKE 'E'."用户取消操作
      LEAVE TO SCREEN 0.

    WHEN 'ENT'.
      PERFORM frm_check_password.
  ENDCASE.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_PASSWORD
*&---------------------------------------------------------------------*
*       text 校验密码
*----------------------------------------------------------------------*
FORM frm_check_password." USING pv_signer TYPE sig_signer
*                              pv_password TYPE ssfpw
*                        CHANGING pv_type TYPE char1
*                                 pv_message TYPE char255.

  DATA:go_system_signature TYPE REF TO cl_ssft_system_signature.
  DATA:lv_signer   TYPE sig_signer,
       lv_password TYPE ssfpw,
       lv_message  TYPE char255.

  CLEAR:gv_sign_result.

  lv_signer = rc70d-signer.
  lv_password = rc70d-password.

  CREATE OBJECT go_system_signature.

  CALL METHOD go_system_signature->if_ssft_system_signature~check_password
    EXPORTING
      if_signer        = lv_signer
      if_ask_pwd       = '' "不弹出弹框
      if_password      = lv_password
    EXCEPTIONS
      canceled_by_user = 1
      password_invalid = 2
      password_expired = 3
      profile_locked   = 4
      system_error     = 5
      rfc_error        = 6
      profile_error    = 7
      signature_error  = 8
      OTHERS           = 9.
  IF sy-subrc NE 0.
*    pv_type = 'E'.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        msgid               = sy-msgid
        msgnr               = sy-msgno
        msgv1               = sy-msgv1
        msgv2               = sy-msgv2
        msgv3               = sy-msgv3
        msgv4               = sy-msgv4
      IMPORTING
        message_text_output = lv_password.
    MESSAGE lv_password TYPE 'I'."
  ELSE.
    gv_sign_result = 'S'.
    CLEAR:gv_screen_keep."去掉屏幕保持
  ENDIF.
ENDFORM.

### ELK 堆栈中配置登录凭据 在 ELK 堆栈中配置登录凭据的过程涉及多个组件的设置,主要包括 Elasticsearch 和 Kibana 的安全功能启用以及用户的创建。以下是详细的说明: #### 启用 Elasticsearch 安全功能 默认情况下,Elasticsearch 不会强制要求身份验证。为了实现基于用户名和密码的身份验证,需要启用内置的安全插件 X-Pack Security。 1. **修改 elasticsearch.yml 文件** 编辑 `elasticsearch.yml` 文件并添加以下内容以启用安全性: ```yaml xpack.security.enabled: true ``` 2. **初始化内置用户密码** 使用 `elasticsearch-setup-passwords` 工具来为内置用户分配初始密码。运行命令如下: ```bash bin/elasticsearch-setup-passwords interactive ``` 这一步将提示输入新密码,并适用于所有内置角色(如 elastic、kibana、logstash 等)。其中,`elastic` 用户具有超级管理员权限[^1]。 3. **重启 Elasticsearch 服务** 修改完成后,需重新启动 Elasticsearch 实例以应用更改。 #### 配置 Kibana 身份验证 为了让 Kibana 支持通过用户名和密码访问,也需要对其进行相应的调整。 1. **编辑 kibana.yml 文件** 找到 Kibana 的配置文件 `kibana.yml` 并加入下面的内容: ```yaml elasticsearch.username: "kibana" elasticsearch.password: "<your_kibana_password>" server.host: "0.0.0.0" xpack.security.enabled: true ``` 2. **重启 Kibana 服务** 更改完毕之后,记得重启 Kibana 来使新的设定生效。 完成上述操作后,在浏览器尝试打开 Kibana 页面时将会看到一个登录界面。此时可以利用之前设置好的 `elastic` 或其他自定义户来进行认证登陆。 如果还需要进一步定制化管理,则可以通过 API 创建额外的角色与用户;或者借助 LDAP/SAML 等外部身份提供者集成更复杂的单点登录(SSO)解决方案[^3]。 ```python import requests def create_user(username, password): url = 'http://<es_host>:9200/_security/user/' + username headers = {'Content-Type': 'application/json'} data = { "password": password, "roles": ["superuser"], "full_name": "Custom User" } response = requests.put(url, json=data, auth=('elastic', '<elastic_password>')) return response.status_code == 200 ``` 以上脚本展示了如何通过 RESTful API 方法新增一名拥有超级用户权限的新成员。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值