完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第3部分

Primefaces AutoComplete,JSF转换器

这篇文章从第一部分和第二部分继续。

JSF拥有Converter工具,可以帮助我们从用户视图中获取一些数据并将其转换为从数据库或缓存中加载的对象。

在“ com.converter”包中,创建以下类:

package com.converter;import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.*;import com.facade.DogFacade;
import com.model.Dog;@FacesConverter(forClass = com.model.Dog.class)
public class DogConverter implements Converter {@Overridepublic Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {DogFacade dogFacade = new DogFacade();int dogId;try {dogId = Integer.parseInt(arg2);} catch (NumberFormatException exception) {throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, 'Type the name of a Dog and select it (or use the dropdow)', 'Type the name of a Dog and select it (or use the dropdow)'));}return dogFacade.findDog(dogId);}@Overridepublic String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {if (arg2 == null) {return '';}Dog dog = (Dog) arg2;return String.valueOf(dog.getId());}
}

关于上面的代码:

  • 在@Converter批注中,有一个名为“ forClass”的属性。 此属性向de JSF指示“ forClass”中指定的所有类将调用Converter。 DogConverter带有“ forClass = com.model.Dog.class ”注释,每次JSF需要Dog类的Converter时,JSF都会调用DogConverter。 无需在“ web.xml”文件中编写任何代码。

Primefaces自动完成中需要转换器代码。 在下面,您会看到使用“自动完成”有多么容易:

personUpdateDialog.xhtml

人MB.java

关于上面的代码:

  • 自动完成功能具有多个选项,例如最小查询长度,启动查询的延迟,下拉菜单以显示所有值等等。 值得一看的是所有选项: http : //primefaces.org/showcase/ui/autoCompleteBasic.jsf和http://primefaces.org/showcase/ui/autocompleteHome.jsf
  • complete ”方法具有在数据库中找到的值的缓存。 该方法转到List <Dog>的每个对象,并保留匹配项。
  • 注意,将始终调用Converter,因为您将在AutoComplete组件中找到“ itemValue =”#{dog}” ”。

您可以看到自动完成功能如下:

使用JSFCSS / javascript /图像

看一下下面的图片,它将显示该帖子的应用程序如何处理资源:

master.xhtml

“ index.xhtml”

使用JSF,很容易处理这种资源。 开发人员不再需要使用文件相对路径。 要像这样使用资源,请像下面那样创建文件:

JSF将映射在“ / WebContent / resources”文件夹中找到的所有资源,开发人员将能够使用上面显示的资源。

“ web.xml”配置

在文件夹“ WebContent / WEB-INF / ”中,创建以下文件:

web.xml

<?xml version='1.0'?>
<web-app version='3.0' xmlns='http://java.sun.com/xml/ns/javaee'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd'><display-name>JSFCrudApp</display-name><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.xhtml</url-pattern></servlet-mapping><welcome-file-list><welcome-file>/pages/protected/index.xhtml</welcome-file></welcome-file-list><context-param><param-name>javax.faces.PROJECT_STAGE</param-name><param-value>Development</param-value></context-param><filter><filter-name>LoginCheckFilter</filter-name><filter-class>com.filter.LoginCheckFilter</filter-class><init-param><param-name>loginActionURI</param-name><param-value>/JSFCrudApp/pages/public/login.xhtml</param-value></init-param></filter><filter-mapping><filter-name>LoginCheckFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>AdminPagesFilter</filter-name><filter-class>com.filter.AdminPagesFilter</filter-class></filter><filter-mapping><filter-name>AdminPagesFilter</filter-name><url-pattern>/pages/protected/admin/*</url-pattern></filter-mapping><filter><filter-name>DefaultUserPagesFilter</filter-name><filter-class>com.filter.DefaultUserPagesFilter</filter-class></filter><filter-mapping><filter-name>DefaultUserPagesFilter</filter-name><url-pattern>/pages/protected/defaultUser/*</url-pattern></filter-mapping> 
</web-app>

faces-config.xml

<?xml version='1.0' encoding='UTF-8'?><faces-config xmlns='http://java.sun.com/xml/ns/javaee'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd'version='2.0'><application><resource-bundle><base-name>messages</base-name><var>bundle</var></resource-bundle><message-bundle>messages</message-bundle></application>
</faces-config>

关于上面的代码:

  • 您将在web.xml文件中找到所有映射的安全过滤器。 您也可以使用@Filter注释,它们的作用相同。
  • 属性“ javax.faces.PROJECT_STAGE ”的值为DEVELOPMENT。 这种配置的优点之一是,如果在屏幕中未找到“ h:message”,则JSF将附加“ h:message”。 如果发生某些异常并且没有任何可显示的组件,JSF将在页面中附加ah:message组件。
  • 在“ faces-config”内部存在一个名为“ message-bundle”的标签。 此标记允许开发人员覆盖JSF默认消息,此标记的值将指向具有默认JSF消息键的文件。 在“ message.properties”文件(第08页)中,键为“ javax.faces.component.UIInput.REQUIRED ”,您在此键中写入的任何值都会影响应用程序中显示的所有“必填字段”消息。

增强应用程序的安全性

不要串联查询

不要使用通常的“ where id =” + id sql代码。 这种代码允许“ SQL Injection ”黑客攻击。 使用ORM的开发人员也容易受到这种攻击,但具有不同的名称:“ HQL注入”。 您可以在Person和User类中找到进行查询的最佳方法:

是否使用JPA无关紧要,不要将查询与字符串连接在一起。

开发人员必须意识到“ SQL注入可能在您的应用程序的任何查询中发生 ”,而不仅仅是登录查询中。 如果用户对您的应用程序具有有效的登录名,则该用户可以在所有查询中执行“ SQL注入 ”。

自动完成关闭

在“ login.xhtml ”页面中,有以下代码:

标记为“自动完成”的关闭会告知浏览器不应保存此字段。 优秀的浏览器(Firefox,Chrome,IE)会尊重此标记,它有助于保护您的应用程序。

如果允许浏览器保留密码,则浏览器必须将此密码存储在某个位置。 如果黑客发现了该密钥的存储位置,他可能会尝试将其破解。

验证所有传入请求

如果仅要求应用程序验证用户是否已登录,则用户类将不需要角色Enum。

如果没有角色验证,则普通用户可以访问系统的任何区域,例如管理页面。 请注意,此应用程序具有始终用于验证所有请求的用户角色的过滤器。 “ 隐藏链接不是保护措施。 开发人员应始终验证所有传入请求 ”。 开发人员可以隐藏URL或按钮,但是如果用户在浏览器中键入URL或模拟get / post调用,则用户可以访问应用程序的任何屏幕。

始终使用h:outputText组件

避免跨站点脚本编写的一种简单方法是使用h:outputText组件显示数据库中的数据。 请注意,在这篇文章中,显示给de user的所有来自数据库的值都使用h:outputText组件。 可以避免使用h:outputText组件的情况是,应用程序将显示“ message.properties”之类的文件中的系统消息。

运行应用程序

启动Tomcat并检查数据库; 请注意,数据库中还没有表。

在浏览器中键入以下URL: http:// localhost / JSFCrudApp / 。

将显示以下屏幕:

键入所需的任何值,然后按登录按钮,如果没有用户或表,请不要打扰。 只需单击它。 您将看到以下错误消息:

再次检查数据库,您将看到所有表都已创建。 应用程序手动控制所有事务,这是JPA / Hibernate在首次调用时才创建表的原因。

您需要创建一个角色为ADMIN的用户(我将该用户命名为Real Madrid),以及另一个角色为USER的用户(我将其命名为Barcelona)。 ADMIN用户将有权访问所有文件夹下的所有系统,但具有USER角色的用户将有权访问文件夹defaultUser下的页面。

如果使用ADMIN用户登录,您将看到:

现在以具有USER角色的用户身份登录:

狗按钮被隐藏。 即使没有该按钮,用户也可以访问Dogs的URL,并且只允许ADMIN角色使用Dogs屏幕。

要查看应用程序的行为和非法访问的行为,请保持使用USER角色的身份登录,并尝试访问以下链接: http://localhost/JSFCrudApp/pages/protected/admin/adminIndex.xhtml

将显示下一个屏幕:

因为AdminPagesFilter检查请求是否来自ADMIN用户,所以将显示此屏幕。 如果用户不是ADMIN角色,我们的忍者猫就会得到它! [=

参考:在uaiHebert博客上,我们的JCG合作伙伴 Hebert Coelho的Tomcat JSF Primefaces JPA Hibernate完整Web应用程序 。

翻译自: https://www.javacodegeeks.com/2012/07/full-web-application-tomcat-jsf_4954.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5首屏加载乐山暴雨,发布前端项目时因chunk-vendors过大导致首屏加载太慢,Vue Build时chunk-vendors的优化方案...

这个优化是两方面的&#xff0c;前端将文件打包成.gz文件&#xff0c;然后通过nginx的配置&#xff0c;让浏览器直接解析.gz文件。1、compression-webpack-plugin插件打包.gz文件安装插件npm install --save-dev compression-webpack-plugin或者yarn add compression-webpack-p…

width:100vh与min-height:calc(100vh + 51px)

vh:相对于视窗的高度&#xff0c;那么vw:则是相对于视窗的高度。 “视区”所指为浏览器内部的可视区域大小&#xff0c;即window.innerWidth/window.innerHeight大小&#xff0c;不包含任务栏标题栏以及底部工具栏的浏览器区域大小。 详细vh的用法&#xff0c;大家可以参考http…

XML配置文件中的Spring配置文件

我的上一个博客非常简单&#xff0c;因为它涵盖了我从Spring 3.0.x到Spring 3.1.x的轻松升级&#xff0c;最后我提到可以将Spring模式升级到3.1&#xff0c;以利用Spring的最新功能。 在今天的博客中&#xff0c;我将介绍这些功能中最酷的功能之一&#xff1a;Spring配置文件。…

交大计算机专业怎样,计算机专业高校实力排名,上海交大第五,清华第二,第一毫无争议...

原标题&#xff1a;计算机专业高校实力排名&#xff0c;上海交大第五&#xff0c;清华第二&#xff0c;第一毫无争议计算机专业在近几年可谓是“大热”&#xff0c;众多考生抢破头也想当码农&#xff0c;背后的原因其实不难理解。互联网时代的到来&#xff0c;计算机早已渗透到…

python_day7 绑定方法与非绑定方法

在类中定义函数如果 不加装饰器 则默认 为对象作为绑定方法 如果增加 classmethod 是 以 类 作为绑定方法 增加 classmethod 是 非绑定方法&#xff0c;就是不将函数 绑定 ##################### class Foo: def func(self): print(self) classmethod def func…

Spring Security使用Hibernate实现自定义UserDetails

大多数时候&#xff0c;我们将需要在Web应用程序中配置自己的安全访问角色。 这在Spring Security中很容易实现。 在本文中&#xff0c;我们将看到最简单的方法。 首先&#xff0c;我们将在数据库中需要以下表格&#xff1a; CREATE TABLE IF NOT EXISTS mydb.security_role (…

python之路-面向对象

编程范式 编程是 程序 员 用特定的语法数据结构算法组成的代码来告诉计算机如何执行任务的过程 &#xff0c; 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合&#xff0c;正所谓条条大路通罗马&#xff0c;实现一个任务的方式有很多种不同的方式&#xff0c; 对这…

西安邮电大学计算机科学与技术有专硕吗,2020年西安邮电大学计算机学院考研拟录取名单及排名!...

20考研复试调剂群&#xff1a;4197552812020年西安邮电大学计算机学院硕士研究生招生复试成绩及综合排名各位考生&#xff1a;现将我院2020年硕士研究生招生复试成绩及综合排名公布(最终录取名单及新生学籍注册均以“全国硕士研究生招生信息公开平台”备案信息为准)&#xff0c…

用Java排序的五种有用方法

Java排序快速概述&#xff1a; 正常的列表&#xff1a; private static List VEGETABLES Arrays.asList("apple", "cocumbers", "blackberry");Collections.sort(VEGETABLES);output: apple, blackberry, cocumbers反向排序&#xff1a; pri…

[python]-数据科学库Numpy学习

一、Numpy简介&#xff1a; Python中用列表(list)保存一组值&#xff0c;可以用来当作数组使用&#xff0c;不过由于列表的元素可以是任何对象&#xff0c;因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3]&#xff0c;需要有3个指针和三个整数对象。对于数值运…

检测一个点, 是否在一个半圆之内的方法

demo: http://jsbin.com/lihiwigaso 需求: 一个圆分成分部分, 鼠标滑上不同的区域显示不同的颜色 思路: 先判断这个点是否在圆之内, 再判断是否在所在的三角形之内就可以了 所需要的全部源码: <!DOCTYPE html> <html> <head><meta charset"utf-8&quo…

计算机网络设备接地规范,网络机房防雷接地的四种方式及静电要求

编辑----河南新时代防雷由于计算机网络系统的核心设备都放置在网络机房内&#xff0c;因而网络机房防雷接地有了较高的环境要求&#xff0c;良好的接地系统是保证机房计算机及网络设备安全运行&#xff0c;以及工作人员人身安全的重要措施。直流地的接法通常采用网格地&#xf…

抓住尾部的StackOverFlowError

使用Java程序时可能要处理的一种更烦人的情况是StackOverFlowError&#xff0c;如果您有一个很好的可生产的测试用例&#xff0c;那么关于使用堆栈大小或设置条件断点/某种痕迹 。 但是&#xff0c;如果您有一个测试案例可能一次失败100次&#xff0c;或者像我的案例一样在AWTM…

Gunicorn配置部分的翻译

写在前面&#xff0c;虽然翻译得很烂&#xff0c;但也是我的劳动成果&#xff0c;转载请注明出处&#xff0c;谢谢。 Gunicorn版本号19.7.1 Gunicorn配置 概述 三种配置方式 优先级如下&#xff0c;越后的优先级越大 1.框架的设置&#xff08;现在只有paster在用这个&#xff0…

台式计算机风扇声音大怎么处理,如何解决电脑电源风扇声音大的问题?

现在的台式机一般用3到5年后&#xff0c;一些问题自然也就慢慢表现出来了。很多网友在使用电脑过程中都有电脑风扇声音大怎么办的问题&#xff0c;电脑风扇声音大就会让人觉得使用电脑很不舒服&#xff0c;怎么办好呢&#xff1f;出现重要的问题要如何解决好呢&#xff1f;现在…

jsp分页功能

http://blog.csdn.net/xiazdong/article/details/6857515转载于:https://www.cnblogs.com/Baronboy/p/6112403.html

Spring Security第1部分–具有数据库的简单登录应用程序

什么是Spring Security&#xff1f; Spring Security是一个提供安全解决方案的框架&#xff0c;可在Web请求级别和方法级别上处理身份验证和授权。 Spring安全性通过两种方式处理安全性。 一种是安全的Web请求&#xff0c;另一种是在URL级别限制访问。 Spring Security使用Serv…

计算机应用 winxp,2017年职称计算机考试模块WindowsXP试题

2017年职称计算机考试模块WindowsXP试题全国专业技术人员计算机应用能力考试是专业技术人员资格考试的一种。接下来应届毕业生小编为大家搜索整理了2017年职称计算机考试模块WindowsXP试题&#xff0c;希望大家有所帮助。1. Windows XP中删除某个文件的快捷方式【 A 】。A. 对原…

Python基础(8)_迭代器、生成器、列表解析

一、迭代器 1、什么是迭代 1 重复   2 下次重复一定是基于上一次的结果而来 1 l[1,2,3,4] 2 count0 3 while count < len(l): 4 print(l[count]) 5 count1 迭代举例2、可迭代对象 可进行.__iter__()操作的为可迭代对象 #print(isinstance(str1,Iterable)),判断str…

Angularjs2-EXCEPTION: Response with status: 200 Ok for URL:

利用jsonp跨域请求数居&#xff0c;报错 core.umd.js:3070 EXCEPTION: Response with status: 200 Ok for URL: 参考&#xff1a;stackoverflow 未解决。。。脑仁疼。。。有小伙伴也碰到过这个问题么&#xff1f; 16/11/30 问题解决 1.服务器端API允许跨域访问(返回的数据添加允…