Angular 9-防止网址更改

时间:2020-09-16 15:08:37

标签: angular

我在Angular 9中有一个网页。一些视图包含元素列表,我们可以单击一个图标并重定向到另一个在URL中传递ID的视图,以显示此元素的所有详细信息。这可能是一个安全错误,因为某些元素只能由某些角色查看,而其他角色则无法访问它们。实际上,所有角色都可以手动更改URL并访问所有元素。

我尝试防止手动更改URL,但是找不到正确的方法。

有人知道我如何忽略手动的URL更改?

2 个答案:

答案 0 :(得分:0)

此处的正确方法是在 boolean flag=true; StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build(); Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build(); SessionFactory factory=meta.getSessionFactoryBuilder().build(); Session session=factory.openSession(); org.hibernate.Transaction t=session.beginTransaction(); session.save(obj1); t.commit(); System.out.println(" details saved check database...); return flag; } 中使用GuardCanActivate。您必须实现app-routing.module.ts来检查用户role-based Guard,并基于该允许用户或阻止其访问特定路径。最好的方法是如果使用Authorizations ob服务器端应用程序,则根据用户Roles中存储的数据检查Access PermissionsToken

因此,通过这种方式,如果用户无权访问JWTComponent,则您的path会阻止他访问,并可以重定向到特定的{{ 1}},即使他/她手动更改了Guard

有关更多信息,请参见以下有用的文章: Router Guards

答案 1 :(得分:0)

您的问题有一个答案,还有其他考虑事项。

其他考虑事项

另一个考虑因素是,用户可以导航到URL,而无论您是否向他们提供自然导航的选项。换句话说,我不需要链接就可以实际输入给定的网址,例如 www.ishouldnotbeabletoaccessthisforexample.com

因此,为了解决这个问题,您必须实现一些routing guards来评估是否可以访问/加载/激活url(取决于您的目的和实现)。因此,例如,CanActivate所做的就是,当您尝试访问URL时,它将评估您在此CanActivate方法中设置的条件。如果返回true,则可以访问url及其内容。如果评估结果为假,则您将无法访问其内容。您也可以选择在此处重定向它们。因此,无论下面的答案如何,您都应该执行该操作。

回答您的问题

最简单的解决方案是根据您设置的授权条件过滤URL列表。

例如:

accessLevel = 0;
listOfUrls = [
  {url: 'www.example.com/canVisitHere', accessLevel: 0},
  {url: 'www.example.com/admin/cantVisitHere', accessLevel: 1}
] as ILink[]; // In this example, ILink is a simple interface, built by you requiring url, and accessLevel. Maybe optional? text or icon also.

// Constructor or wherever you want to evaluate your URLS
constructor() {
  this.accessLevel = this.getAccessLevel(); // Or use subject instead
  this.listOfUrls = this.listOfUrls.filter(x => x.accessLevel <= this.accessLevel); // If using a subject above, place this logic inside of your subscribe response
}

这甚至会阻止无法访问的链接首先显示在页面上,从可用性/ UX的角度来看,这是您应该做的。