如何引用web.xml文档中的ember-js页面(用于应用jaas身份验证)



我是ember js的新手,我需要将Jaas身份验证应用于我的应用程序,该应用程序的前端构建在ember js上,后端使用servlet。我构建了ember-js部分,并在tomcat服务器上运行它,所以从技术上讲,我的应用程序是在tomcat上的。所以我尝试在那些成员页面或路由上应用安全约束。当我点击受保护的URL时,会加载受保护的页面,而不是将页面重定向到登录路径。

这是web.xml文件

<security-constraint>
        <web-resource-collection>
             <web-resource-name>admin</web-resource-name>
             <url-pattern>/admin</url-pattern>
        </web-resource-collection>
        <auth-constraint>
             <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    
    <security-role>
        <role-name>admin</role-name>
    </security-role>
    
    <login-config>
         <auth-method>FORM</auth-method>
         <realm-name>studentDB_ember</realm-name>
         <form-login-config>
              <form-login-page>/login</form-login-page>
             <form-error-page>/error-login</form-error-page>
         </form-login-config>
    </login-config>

我知道我的xml页面出了问题。我的身份验证的其他部分运行良好。我找不到正确的方式来表示我的会员页面的url。我应该提到router.js上的路径吗?我试过了,还是没用。请让我知道我做错了什么,以及我应该如何配置我的xml,以便适当地应用安全约束,并使我的身份验证正常工作。

仅供参考:我在environment.js文件中提到了位置类型为hash"#"。我的链接是这样的http://localhost:8085/test_auth/#/admin.如果它没有经过身份验证,它会引导我进入登录页面,如果用户名或密码错误,它会指引我进入错误页面。如果一切顺利,我们可以看到管理页面。

提前谢谢。如果你需要更多信息,请告诉我。感谢您的帮助。

如果你的ember应用程序由后端在每条路由上发送相同的html(在单页应用程序中很常见(,你会想让后端提供html,然后通过beforeModel在前端处理重定向。

例如:

// app/routes/admin.js
import Route from '@ember/routing/route';
import { service } from '@ember/service';
export default class AdminRoute extends Route {
  @service router;
  beforeModel(/* transition */) {
    if (! isAuthenticated ) { // you'll need to define how to determine how isAuthenticated works -- this can be property on a service, an api call, etc.
      this.router.transitionTo('login'); 
    }
  }
}

强烈建议查看https://github.com/simplabs/ember-simple-auth以及他们如何处理这类问题。

最新更新