权限校验

本文详细阐述了权限校验的实现方式,通过继承自RequestProcessor的自定义类ShyRequestProcessor来确保用户操作符合其权限。介绍了如何通过反射获取方法上的注解,以及如何根据用户权限列表判断操作是否合法。

package com.newer.liu.system.comment;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.RequestProcessor;
import org.apache.struts.actions.DispatchAction;

import com.newer.liu.system.bean.OperatorBean;
import com.newer.liu.system.bean.PrivilegeBean;
import com.newer.liu.system.servce.OperatorServce;
import com.newer.liu.system.servce.PrivilegeServce;
import com.newer.liu.system.servce.impl.OperatorServceImpl;
import com.newer.liu.system.servce.impl.PrivilegeServceImpl;
import com.sun.swing.internal.plaf.metal.resources.metal;
/**
* 权限校验

*继承RequestProcessor
* @author liu
*
*/
public class ShyRequestProcessor extends RequestProcessor {

private PrivilegeServce dao = new PrivilegeServceImpl();

@Override
protected ActionForward processActionPerform(HttpServletRequest request,
HttpServletResponse response, Action action, ActionForm form,
ActionMapping mapping) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("-----------权限------------------");
if (isValiue(request, action, mapping)) {
return super.processActionPerform(request, response, action, form,
mapping);
} else {
return mapping.findForward("error");
}
}

 

//=========================================

 

// 调用方法
private boolean isValiue(HttpServletRequest request, Action action,
ActionMapping mapping) {
Method method = this.getMethod(request, action, mapping);
MyInterface my = this.getAnnotation(method);
if (my != null) {
//得到该用户的所有权限
Object str=request.getSession().getAttribute("name");
List<PrivilegeBean> list = dao.getAll(str.toString());
System.out.println(str+"============"+list);
PrivilegeBean p = new PrivilegeBean();
p.setModel(my.mode());
p.setPrivilegeName(my.limit());
p.setOperatorId(str.toString());
if (list.contains(p)) {
return true;
} else {
return false;
}

}
return true;
}

//--------------------------------

 

 

// method 根据反射到到方法的全部值
private Method getMethod(HttpServletRequest request, Action action,
ActionMapping mapping) {
Method method = null;

String methodName = "execute";
if (action instanceof DispatchAction) {
String parme = mapping.getParameter();
methodName = request.getParameter(parme);

}
Class[] cls = { ActionMapping.class, ActionForm.class,
HttpServletRequest.class, HttpServletResponse.class };

try {
method = action.getClass().getDeclaredMethod(methodName, cls);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return method;
}

//注解
public MyInterface getAnnotation(Method name) {
MyInterface mf = null;
if (name.isAnnotationPresent(MyInterface.class)) {
mf = name.getAnnotation(MyInterface.class);

}
return mf;
}

<think> 嗯,用户这次问的是SAP权限校验的方法和流程,看来ta正在处理SAP系统权限管理问题。之前用户提到过“参考站内引用”,但实际对话历史中没有相关引用,可能是个误操作。用户应该是IT管理员或SAP顾问角色,需要具体的操作指导而非理论概念。 用户的问题很聚焦,但“权限校验”这个表述可能有双重含义:既指日常的权限检查(比如用户申请权限时的审核流程),也指技术层面的权限验证机制。需要把两个维度都覆盖到。考虑到SAP系统的复杂性,应该先区分清楚RBAC设计、事务代码检查和表权限控制这三个核心层面。 从安全角度,得提醒SU53和ST01这些工具的使用场景——很多用户容易混淆权限检查和故障诊断工具。另外用户没提具体模块,但财务和HR模块的权限校验差异很大,需要补充说明模块特殊性。最后要强调审计追踪的重要性,这是大多数企业SAP权限管理的薄弱环节。 啊,差点忘了用户要求“生成相关问题”。第一个问题可以引导到权限设计(用户可能后续需要),第二个问题聚焦常见错误(实用性强),第三个问题留作扩展(SOX合规是热点)。这些应该能覆盖用户潜在需求。 注意到用户上次接受过快速排序的示例回复,这次保持类似结构:先框架性说明,再分步骤展开,最后给工具和注意事项。避免直接贴代码(虽然ABAP示例可能有用),因为权限校验更多是流程操作。 </think> 以下是SAP权限校验的方法、流程及相关工具详解,结合企业最佳实践整理: --- ### **一、权限校验核心方法** 1. **RBAC(基于角色的访问控制)** - 创建角色(Transaction: PFCG)关联事务代码(T-Code)、字段值、组织层级 - 用户通过角色继承权限,而非直接分配 - 示例:财务角色限制公司代码范围 `COMP_CODE = '1000'` 2. **对象级权限检查** - 关键对象: - `S_TCODE`(事务代码权限) - `S_TABU_NAM`(表访问权限,如禁止访问薪资表`PAYROLL`) - `S_PROGRAM`(程序执行权限) 3. **字段级权限(Authorization Field)** - 限制敏感字段(如成本中心、银行账号) - 在角色中通过`SU20`/`SU21`定义字段级规则 ```abap ACTIVITY = '03'; // 仅允许显示 COMPANY_CODE = 'US*'; // 通配符限制 ``` --- ### **二、标准校验流程** ```mermaid graph TD A[用户登录] --> B[执行事务代码] B --> C{系统检查} C -->|检查对象| D[S_TCODE权限] C -->|检查数据| E[组织架构范围] C -->|字段操作| F[字段权限值] D & E & F --> G{权限通过?} G -->|是| H[执行操作] G -->|否| I[弹出错误SU53] ``` 1. **权限申请阶段** - 用户提交权限请求单(ITSM工具或邮件) - 关键字段:**事务代码**、**组织对象**(如工厂/销售范围)、**操作类型**(创建/修改) 2. **权限设计阶段** - 权限管理员在PFCG中: - 添加事务代码(Menu标签页) - 设置数据范围(Authorization标签页,使用`SU24`派生规则) - 分配字段限制(通过`SU22`配置字段检查) 3. **权限测试阶段** - 角色分配后必须执行`SUPC`进行用户模拟测试 - 使用`SU53`实时查看权限缺失原因(命中检查的权限对象) 4. **审计阶段** - 定期运行`RSUSR003`导出用户权限清单 - 使用`RSECADMIN`进行敏感操作监控(如SU01用户修改) --- ### **三、关键工具与事务代码** | 工具 | 用途 | 关键点 | |---------------|-------------------------------|--------------------------| | **PFCG** | 角色管理 | 必须激活`Profile Generator` | | **SUIM** | 权限分析报表 | 交叉检查用户/角色权限 | | **RSCUA** | 批量角色修改 | 避免直接改生产角色 | | **ST01** | 权限跟踪 | 需开启`Authorization Trace` | | **GRC Access Control** | 合规性管控 | 实现自动化权限审计(需额外安装)| --- ### **四、最佳实践与风险防控** 1. **权限最小化原则** - 敏感事务代码(如`SE16N`)必须配置表访问组(`SUIM>Table Access`) - 限制`SU01`仅允许特定管理员使用 2. **定期清理** - 通过`RSUSR006`检查长期未登录账号 - 使用`PFUD`删除未使用角色 3. **紧急访问管理** - 特权账号(如Firefighter ID)需配置审批流程 - 操作记录自动转储到独立存储库(使用GRC方案) > **⚠️ 注意事项:** > - 生产系统禁止直接使用`SA38`执行程序(需配置程序权限组) > - 关键变更后必须执行`SUPC`测试 > - 字段权限错误可能导致数据误删(如未限制`DELETE`权限) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值