当前位置: 首页 > news >正文

亚马逊欧洲站wordpress相册插件中文版

亚马逊欧洲站,wordpress相册插件中文版,一个空间多个php网站,财经app制作公司实际上#xff0c;每个Web应用程序都应该有多个用户#xff0c;每个用户都有一些数据-帖子#xff0c;文档#xff0c;消息等等。 最明显的事情是保护这些实体免遭非这些资源合法所有者的用户获取。 不幸的是#xff0c;这不是最容易的事情。 我并不是说很难#xff0c;… 实际上每个Web应用程序都应该有多个用户每个用户都有一些数据-帖子文档消息等等。 最明显的事情是保护这些实体免遭非这些资源合法所有者的用户获取。 不幸的是这不是最容易的事情。 我并不是说很难它不像简单地返回资源那样直观。 当您是/record/{recordId}端点时您将立即执行对recordId的数据库查询。 只有这样才需要检查此记录是否属于当前经过身份验证的用户。 框架在这里没有帮助因为这种访问控制和所有权逻辑是特定于域的。 没有明显的通用方法来定义所有权。 它取决于实体模型和实体之间的关系。 在某些情况下它可能非常复杂需要在联接表中查找对于多对多关系。 但是您应该自动执行此操作原因有两个。 首先在每个端点/控制器方法上手动执行这些检查很繁琐并且使代码难看。 其次更容易忘记添加这些检查尤其是在有新开发人员的情况下。 您可以在DAO的所有地方进行这些检查但通常应尽早失败因此这些检查应在控制器端点处理程序级别上进行。 对于Java和Spring可以使用批注和HandlerInterceptor来自动执行此操作。 在使用任何其他语言或框架的情况下也可以使用类似的方法-一种可插拔的方式来描述要检查的所有权关系。 以下是放置在每个控制器方法上的示例注释 public interface VerifyEntityOwnership {String entityIdParam() default id;Class? entityType(); } 然后定义拦截器当然应将其配置为执行 Component public class VerifyEntityOwnershipInterceptor extends HandlerInterceptorAdapter {private static final Logger logger LoggerFactory.getLogger(VerifyEntityOwnershipInterceptor.class);Autowiredprivate OrganizationService organizationService;Autowiredprivate MessageService MessageService;Autowiredprivate UserService userService;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {Authentication authentication SecurityContextHolder.getContext().getAuthentication();// assuming spring-security with a custom authentication token typeif (authentication instanceof ApiAuthenticationToken) {AuthenticationData authenticationData ((ApiAuthenticationToken) authentication).getAuthenticationData();UUID clientId authenticationData.getClientId();HandlerMethod handlerMethod (HandlerMethod) handler;VerifyEntityOwnership annotation handlerMethod.getMethodAnnotation(VerifyEntityOwnership.class);if (annotation null) {logger.warn(No VerifyEntityOwnership annotation found on method {}, handlerMethod.getMethod().getName());return true;}String entityId getParam(request, annotation.entityIdParam());if (entityId ! null) {if (annotation.entityType() User.class) {User user userService.get(entityId);if (!user.getClientId().equals(clientId)) {return false;}} else if (annotation.entityType() Message.class) {Message record messageService.get(entityId);if (!message.getClientId().equals(clientId) {return false;}} // .... more}}return true;}SuppressWarnings(unchecked)private String getParam(HttpServletRequest request, String paramName) {String value request.getParameter(paramName);if (value ! null) {return value;}MapString, String pathVariables (MapString, String) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);return pathVariables.get(paramName);} } 您会看到这假定每种类型都需要自定义逻辑。 如果您的模型很简单则可以使之通用–使所有实体都使用它们都定义的getClientId()方法实现某些Owned接口。 然后只需要一个dao.get(id, entityClass); 并避免使用特定于实体的逻辑。 请注意当方法上没有注释时将显示警告-那里表示您可能已经忘记添加一个。 某些端点可能不需要所有权检查-对于它们您可以具有特殊的IgnoreEntityOwnership批注。 关键是要做出有意识的决定以不验证所有权而不是忘记所有权并引入安全问题。 我的意思可能很明显。 但是我已经看到了许多这种遗漏的例子包括生产政府项目。 正如我说的框架不会强迫您考虑这一方面因为它们不能以通用的方式做到这一点– Web框架通常与您的实体模型无关而ORM与您的控制器无关。 有处理所有这些方面的综合框架但是即使它们没有通用的机制 至少我不知道。 安全性包括对系统应用一套良好的实践和原则。 但是它还包括一些程序和自动化程序这些程序和自动化程序可以帮助开发人员和管理员不要忽略他们通常知道的东西而会时不时地忘记。 而且应用安全性原则越乏味则一贯应用安全性原则的可能性就越大。 翻译自: https://www.javacodegeeks.com/2018/10/automate-access-control-user-entities.html
http://www.zqtcl.cn/news/474892/

相关文章:

  • 西安企业建站wordpress外部调用后台
  • 江苏手机网站建设公司域名查询ip解析
  • 网站上的用户注册怎么做的苏州网站建设制作服务商
  • 网站开发模版宁波网
  • 以鹦鹉做头像的网站wordpress post是什么
  • 公司怎么建立自己网站做网站需要编码吗
  • 网站域名根目录在哪里wordpress做跟随导航导航
  • 昆明网站建站推广it外包工作怎么样
  • 上海长宁网站建设公司WordPress 采集文章 图片
  • 紫色 网站网络设计的最后一个步骤是
  • 广东省建设安全卡查询网站网站开发需要的语言
  • 网站的建设需要考虑什么问题投放广告的网站
  • 雅虎提交网站入口常州哪家做网站好
  • 哪些网站是503错误代码太原搭建网站的公司
  • 网站建设公司需要有什么东西凡科建站seo
  • 荷泽网站建设买链接做网站 利润高吗
  • 网站嵌套代码网络营销与策划实训
  • 网上做环评立项的网站是哪个网站开发是前端吗
  • 公司网站可以自己建立吗前端网站开发教程
  • 淘宝客导购网站营销推广软件有哪些
  • 专做写字楼出租的网站建设银行北京招聘网站
  • 龙华观澜网站建设酒店网站建设策划
  • 淄博网站排名做版权保护的网站
  • 专业轻电商网站建设公司新闻发布的网站
  • 设计型网站营销存在的问题及改进
  • 南通建设企业网站wordpress 位置地图
  • 无锡本地网站有哪些手机拍摄720全景软件
  • 泉州晋江网站建设费用东莞市住房和城乡建设局门户网站
  • 苏州网站建设哪家便宜平谷手机网站设计
  • 建设项目一次公示网站嘉兴新站seo外包