我目前正在实现一个小型的Spring MVC PoC,我想使用JSF作为视图技术,因为我公司的大多数人习惯于使用Primefaces环境的J2EE.
Spring MVC 3是支持JSF,还是只支持JSP?我已经阅读了两篇混合两篇的文章.
我需要创建一个吸引人的UI.有没有一种简单的方法来使用Spring MVC和JSP作为视图技术?
我们的应用程序在多页中使用计划/日历.它基本上是一个时间管理APP
我想看到一个简单的登录应用程序,而不是简单的这虽然.
我想要实现的是对JSF如何工作的理解,我已经开发了很多ASP.NET,你可以在其中找到代码,在那里你可以检查是否在登录时创建了会话.
JSF中的类似解决方案会很棒.
这基本上就是我想要实现的目标:
("成功"和失败被映射到faces-config.xml)
在成功页面我希望确定用户已登录,因此如果您没有正确的会话,则应该无法导航到"success.jspx".
目前,我正在使用JSF 2.0,Tomcat 7和MongoDB开发一个Web项目.我有一个很大的问题,如何处理数据库中用户的会话管理和身份验证/授权.
我想要的结构如下:只有登录用户才能创建事件,每个人都可以看到创建的事件.
create.xhtml - >仅适用于已登录的用户.events.xhtml - >为大家公开.我计划的基本结构是:
create.xhtml)login.xhtml@SessionScoped进入比赛)问题是:
@SessionScoped注释?在Create.java或
LoginManager.java?我希望在用户登录系统后控制访问权限.
例如:
administrator : can add, delete and give rights to employee
employee : fill forms only
...
Run Code Online (Sandbox Code Playgroud)
因此,在知道用户具有哪些权限后,检查数据库,我想限制该用户可以看到和执行的操作.有一个简单的方法吗?
编辑
@WebFilter("/integra/user/*")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
Authorization authorization = (Authorization) req.getSession().getAttribute("authorization");
if (authorization != null && authorization.isLoggedIn()) {
// User is logged in, so just continue request.
chain.doFilter(request, response);
} else {
// User is not logged in, so redirect to …Run Code Online (Sandbox Code Playgroud) 我对这个事实背后的想法有一个疑问,即只有UIForm属性prependId.为什么NamingContainer界面中没有指定属性?你现在可能会说这是因为后向兼容性但我宁愿打破兼容性并让实现该接口的用户也实现prependId的方法.
从我对UIForm组件中的prependId的观点来看,主要的问题是它会破坏findComponent()
我希望如果我使用prependId,那么NamingContainer行为会改变,不仅与渲染有关,而且在想要在组件树中搜索组件时也是如此.
这是一个简单的例子:
<h:form id="test" prependId="false">
<h:panelGroup id="group"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
现在,当我想获得panelGroup组件时,我希望将字符串传递"group"给方法findComponent(),但它不会找到任何东西,我必须使用"test:group".
具体问题是,当使用ajax时prependId="false".ajax标记在属性更新和处理中期望值关注命名容器.有点奇怪的是,当我使用它时prependId="false",我必须指定完整的id或路径,但没关系.
<h:form id="test" prependId="false">
<h:panelGroup id="group"/>
</h:form>
<h:form id="test1" prependId="false">
<h:commandButton value="go">
<f:ajax render="test:group"/>
</h:commandButton>
</h:form>
Run Code Online (Sandbox Code Playgroud)
那么这段代码将呈现没有问题,但它不会更新panelGroup,因为它无法找到它.在PartialViewContext将只包含ID "group"为renderIds的元素.我不知道这是否是预期的,可能是但我不知道代码.现在我们到了方法findComponent()无法找到组件的位置,因为作为参数传递的表达式是"group"方法期望"test:group"找到组件的位置.
一种解决方案是编写自己的解决方案,findComponent()这是我选择处理此问题的方式.在这个方法中,我处理一个组件,它是一个NamingContainer并且具有属性prependId像正常一样设置为false UIComponent.我将不得不为每个UIComponent提供prependId属性的事情做到这一点,这很糟糕.反射将有助于绕过类型的静态定义,但它仍然不是一个非常干净的解决方案.
另一种方法是在NamingContainer接口中引入prependId属性,并改变行为,findComponent()如上所述.
最后提出的解决方案是改变ajax标记的行为以传递整个id,但这只能解决ajax问题而不是findComponent()实现背后的程序问题.
你怎么看待这个以及它为什么会这样实现呢?我不能成为第一个遇到这个问题的人,但是我找不到相关的主题?!
我正在尝试保护使用JSF2.0构建的应用程序.
我很困惑人们什么时候选择使用像Shiro,Spring Security或owasp的esapi这样的安全替代品来留下容器管理的安全性.看过Stack Overflow上的一些相关问题后,我意识到JSF开发人员过去更喜欢基于容器的安全性.但我也强烈建议使用Apache Shiro.我是安全问题的新手,不知道可能是什么相关问题以及如何处理它们.因此,我正在寻找通过其默认设置/自己处理大多数安全问题的东西.
就我的应用程序需求而言,我有一个社交应用程序,具有不同角色的用户可以访问不同的页面集,并可以根据他们的角色在这些页面上使用不同级别的功能.
在那种情况下,您认为对我来说可能是一个很好的选择吗?
我个人已经确信选择Shiro,因为它易于使用并且为新手照顾大部分事情.
为JSF Web应用程序实现身份验证和授权的最佳方法是什么?我还是希望使用基于容器的安全性,因为我需要调用需要主体的EJB.
我意识到基于表单的身份验证是与JSF的一次重大斗争,但是我可以使用PhaseListener或类似的程序登录来验证用户吗?
我还应该看看其他任何方法吗?
我在这里写一个问题,因为我自己几个月都找不到解决方案.我的情况:我有一个用java编写的客户端服务器应用程序,它使用Java2ee 6和EJB3.0.服务器端部署在glassfish 3.0上.我需要为应用程序开发/实现登录模块.必须使用ldap服务器进行身份验证,并在应用程序内部处理授权.因此,我想聘请JAAS技术来进行身份验证和授权.我这样做是为了例如像在这里.然后我按照本教程和官方文档进行登录.我的问题是ldap登录不起作用.
我的代码:
LoginContext lc = null;
try {
CallbackHandler handler = new CallbackHandler() {
public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
for( int i = 0; i < callbacks.length; i++ ) {
if( callbacks[i] instanceof NameCallback ) {
// prompt the user for a username
NameCallback nc = (NameCallback)callbacks[i];
nc.setName("admin");
System.out.println("Login done.");
} else if( callbacks[i] instanceof PasswordCallback ) {
// prompt the user for sensitive information
PasswordCallback pc = (PasswordCallback)callbacks[i];
pc.setPassword("mypassword".toCharArray()); …Run Code Online (Sandbox Code Playgroud) 我刚开始学习Java EE.我的目标是为羽毛球运动员实施一个门户网站(使用EJB 3和JSF),用户可以在其中发布和分析他们的结果.
为了保持简单(事实证明它确实不是)我决定使用容器提供的安全系统(JBoss as7).在遇到一些问题后,我设法让身份验证/授权工作.但是,我有一个问题,我无法解决.
当我尝试访问受保护的页面时,我得到了正如预期的那样,被安全系统截获.但是,在我登录后,我没有被重定向到我最初请求的页面.相反,我再次被要求登录.如果我手动输入原始地址,我可以毫无困难地访问该页面.
我已经在stackoverflow上读了很多线程,但还是无法解决我的问题.如果有人能帮助我,我真的很感激!
Authentication.java:
@ManagedBean
@SessionScoped
public class Authentication {
private String username = "";
private String password = "";
private User user = new User();
@EJB
UserService service;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User getUser() {
return user;
}
public void login() {
FacesContext context = FacesContext.getCurrentInstance(); …Run Code Online (Sandbox Code Playgroud) 我目前在 Wildfly 22 上部署了一个 Web 应用程序,使用 JSF 2.3 和 OpenJDK 11。我目前正在将登录页面从 j_security_check 迁移到以编程方式登录,遵循本文中的 BalusC 示例:
使用 j_security_check 在 Java EE / JSF 中执行用户身份验证
我不会发布登录代码,因为它与 BalusC 的帖子完全相同。
登录过程工作正常,但是在进行此更改后,我在 Wildfly 上收到两个警告。
WELD-000717: Unable to deactivate context org.jboss.weld.module.web.context.http.LazyHttpConversationContextImpl@14d2bf9d when destroying request HttpServletRequestImpl [ GET /app/login/login.xhtml ]
Run Code Online (Sandbox Code Playgroud)
WELD-000335: Conversation context is already active, most likely it was not cleaned up properly during previous request processing: HttpServletRequestImpl [ GET /app/resources/bootstrap/css/bootstrap.min.css]
Run Code Online (Sandbox Code Playgroud)
关于导致这些警告的原因有什么提示吗?
感谢您的帮助!