security - react +路由+安全

标签 security reactjs react-router openam

我正在使用 React 和 React-router 构建一个 Web 应用程序,我想使用现有的外部访问管理基础设施 ( OpenAM ) 来保护我的 React 应用程序的某些路由。

我想保护 http://web.example.com:8080/myapp/#/user-profile url 表示只有登录的用户才能访问该路由。

我还有一些其他公开的路由,任何用户都可以打开它们,例如 http://web.example.com:8080/myapp/#/welcome .

访问管理保护 url,如果用户想要打开 protected url,则访问管理会显示登录表单,成功登录后将显示原始请求的 url。

这里的问题是,react-router 在“#”字符之后添加了路由信息,并且从访问管理器的角度来看,上述两个不同的 url 是相同的,因为它们引用了相同的 Web 资源 (/myapp)。这两个 URL 之间的区别出现在“#”字符后面。

我需要有不带“#”字符的真实网址,如下所示:

有没有办法在 React 中使用真实的 url 映射? 你们有什么想法或解决方法如何在 React 中使用真实的 url 路由吗?

谢谢。

更新: 这是我的代码。 Web 浏览器中的 url 看起来不错,但我收到“关于与任何路由不匹配”错误。请求的网址:http://web.example.com:8080/myapp/about

import {Router, Route, IndexRoute, useRouterHistory} from 'react-router';
import {createHistory} from 'history';    

const browserHistory = useRouterHistory(createHistory) ({
   basename: '/myapp/'
});

ReactDOM.render(
   <Router history={browserHistory}>
      <Route path="/" component={MainLayout}>
         <IndexRoute component={Home} />
         <Route path="about" component={About} />
      </Route>
   </Router>
)

最佳答案

您可以按照评论中的建议使用browserHistory来删除#符号。如果您希望 react 应用程序的根目录为 /myapp/ 而不是 / 您可以尝试:

import {Router, Route, useRouterHistory} from 'react-router';
import {createHistory} from 'history';    

const browserHistory = useRouterHistory(createHistory)({basename: '/myapp/'});

ReactDOM.render(
  <Router history={browserHistory}>
    ...
  </Router>
)

关于security - react +路由+安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38314807/

相关文章:

security - 将我的桌面应用程序列入用户计算机的白名单

javascript - 如何在 React (JSX) 中清除/重置状态内的数组

javascript - 如何摆脱告诉我将 svg 属性更改为驼峰大小写的 react 错误警告?

javascript - Nodejs 等待本地主机......并获取数据

javascript - Wordpress WPBakery 和 Kaswara 安全漏洞

google-chrome - 在localhost的情况下如何克服chrome的samesite cookie更新的影响?

linux - 配置 Apache Web 服务器以执行 SSL 身份验证

javascript - 一旦父组件的获取调用完成,如何提醒子组件? ReactJS

reactjs - 页面刷新时 Firebase onAuthStateChange 返回未定义

css - 为所有路由 react 路由器 CSS