让我告诉你系统如何运作。
我正在使用JAAS登录模块进行登录和角色管理。我可以根据自己的角色访问特定页面。
我在地址栏中输入我的网址,点击回车。
出现登录页面,正确登录后,它会将我重定向到正确的页面(现在我们称之为page1.jsf)。
我想在页面加载时调用服务器端方法。
你能帮我吗?
**编辑**
假设我必须访问只能由role1访问的page1.jsf。
在地址栏中,我输入http://localhost:8080/myapp/page1.jsf
JAAS显示登录页面,在正确输入凭据后,我被重定向到page1.jsf
一旦请求page1.jsf或页面加载,我想从我的类调用服务器端方法重新加载page1.jsf
答案 0 :(得分:2)
如果您使用的是JSF 2,则可以使用上面的页面代码段:
<html xmlns="http://www.w3.org/1999/xhtml"
... >
<f:view contentType="text/html">
<f:event type="preRenderView" listener="#{permissionManager.checkRoles}" />
<f:attribute name="roles" value="ROLE" />
...
</f:view>
</html>
您可以添加包含该角色的属性,并在PermissionManager.checkRoles()
执行重定向到相关页面。
@Named
@ApplicationScoped
class PermissionManager {
...
public void checkRoles(ComponentSystemEvent event) {
String acl = "" + event.getComponent().getAttributes().get("roles");
//Check user role
...
//Redirect if required
try {
ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context
.getApplication().getNavigationHandler();
handler.performNavigation("access-denied");
} catch (Exception e) {
...
}
}
}
查看此example 并看看这个related question
答案 1 :(得分:0)
是的,这有效。您也可以访问Servlet,而不是访问jsp或jsf页面。所以创建一个新的servlet。 E.g:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestServlet
*/
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static void yourMethod() {
// do something useful
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
yourMethod();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
然后在web.xml文件中创建一个新条目,以便将Servlet映射到/.
<servlet>
<display-name>TestServlet</display-name>
<servlet-name>TestServlet</servlet-name>
<servlet-class>your.packages.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
在此之后,您应该可以致电localhost:8080/TestServlet
然后调用您的方法。