Differences
This shows you the differences between two versions of the page.
|
java:new-app-v2 [05/09/2017 09:49] Anthony Arents [POM :] |
java:new-app-v2 [14/12/2017 12:33] (current) Anthony Arents [Tracking versions] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== New Java Web Applications ====== | ====== New Java Web Applications ====== | ||
| + | |||
| + | End of life January 2019. | ||
| If you are making a company project : | If you are making a company project : | ||
| Line 7: | Line 9: | ||
| * Netbeans project | * Netbeans project | ||
| * Maven | * Maven | ||
| - | * Spring (latest -> 4.3.9.RELEASE) | + | * Spring (latest -> 4.3.12.RELEASE) |
| * Spring Security (latest -> 4.2.3.RELEASE) | * Spring Security (latest -> 4.2.3.RELEASE) | ||
| - | * Hibernate (latest -> 5.2.10.Final) | + | * Hibernate (latest -> 5.2.12.Final) |
| * Javamelody (latest, developer tool, used for statistics) | * Javamelody (latest, developer tool, used for statistics) | ||
| * ExtJS 6 | * ExtJS 6 | ||
| Line 22: | Line 24: | ||
| https://www.artifact-listener.org/\\ | https://www.artifact-listener.org/\\ | ||
| \\ | \\ | ||
| - | My list (on the right of the screenshot) | + | My list (on the right of the screenshot)\\ |
| - | {{:java:screenshot-www.artifact-listener.org_2017-07-06_11-41-02.png?nolink|}} | + | {{:java:screenshot-www.artifact-listener.org_2017-07-06_11-41-02.png?nolink&600|}} |
| \\ | \\ | ||
| Line 2779: | Line 2781: | ||
| public ApiDTO() { | public ApiDTO() { | ||
| + | } | ||
| + | |||
| + | public static ApiDTO error() { | ||
| + | final ApiDTO apiDto = new ApiDTO(); | ||
| + | apiDto.setSuccess(Boolean.FALSE); | ||
| + | return apiDto; | ||
| } | } | ||
| Line 2838: | Line 2846: | ||
| </code> | </code> | ||
| + | ===== Presentation (Ajax, MultiActionController) ===== | ||
| + | |||
| + | use requestmapping to map based on action parameter | ||
| + | |||
| + | <code java> | ||
| + | package de.jcpis.analyse.presentation; | ||
| + | |||
| + | import org.apache.logging.log4j.LogManager; | ||
| + | import org.apache.logging.log4j.Logger; | ||
| + | import org.springframework.beans.factory.annotation.Autowired; | ||
| + | import org.springframework.stereotype.Controller; | ||
| + | import org.springframework.web.bind.annotation.RequestMapping; | ||
| + | import org.springframework.web.context.request.WebRequest; | ||
| + | import org.springframework.web.servlet.ModelAndView; | ||
| + | import org.springframework.web.servlet.view.json.MappingJackson2JsonView; | ||
| + | |||
| + | /** | ||
| + | * | ||
| + | * @author anthonyarents | ||
| + | */ | ||
| + | @Controller | ||
| + | @RequestMapping("/bankverbindung.json") | ||
| + | public class BankverbindungController { | ||
| + | |||
| + | @RequestMapping(params = "action=validateBankverbindung") | ||
| + | public ModelAndView validateBankverbindung(final WebRequest hsr) { | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| ===== Presentation (Restcontroller) ===== | ===== Presentation (Restcontroller) ===== | ||
| Line 3130: | Line 3167: | ||
| } | } | ||
| + | </code> | ||
| + | |||
| + | ===== Server-side validation ===== | ||
| + | |||
| + | At this time, I've only added a check to disallow "dangerous" html on fields which will display the html as is (instead of htmlEncoded like the rest of the output) | ||
| + | |||
| + | extra requirements on the project : | ||
| + | * el-api (v2.2 is used for tomcat6 & tomcat7, v3.0.0 is used with java8 & tomcat8) | ||
| + | * hibernate-validator (v5.4.1.Final in case of tomcat6 & 7, use latest in case of java8 & tomcat8) | ||
| + | * jsoup (use latest) | ||
| + | |||
| + | ==== DTO ==== | ||
| + | === imports === | ||
| + | <code java> | ||
| + | import org.hibernate.validator.constraints.SafeHtml; | ||
| + | </code> | ||
| + | === Getter === | ||
| + | <code java> | ||
| + | @SafeHtml | ||
| + | public String getDescription() { | ||
| + | return description; | ||
| + | } | ||
| + | </code> | ||
| + | ==== Presentation ==== | ||
| + | === Imports === | ||
| + | <code java> | ||
| + | import org.springframework.validation.BindingResult; | ||
| + | import org.springframework.validation.annotation.Validated; | ||
| + | </code> | ||
| + | |||
| + | === Changes to methods updateById & createNew === | ||
| + | <code java> | ||
| + | @JsonView(View.Public.class) | ||
| + | @PreAuthorize("hasRole('ROLE_ADMIN')") | ||
| + | @RequestMapping(value = "/{id}", method = RequestMethod.PUT) | ||
| + | @ResponseStatus(HttpStatus.OK) | ||
| + | public ApiDTO updateById(@PathVariable final UUID id, @RequestBody @Validated final NotificationDTO dto, final BindingResult bindingResult) { | ||
| + | if (bindingResult.hasErrors()) { | ||
| + | return ApiDTO.error(); | ||
| + | } | ||
| + | dto.setId(id); | ||
| + | final Notification result = notificationService.save(dto); | ||
| + | return new ApiDTO(result); | ||
| + | } | ||
| + | |||
| + | @JsonView(View.Public.class) | ||
| + | @PreAuthorize("hasRole('ROLE_ADMIN')") | ||
| + | @RequestMapping(value = "", method = RequestMethod.POST) | ||
| + | @ResponseStatus(HttpStatus.CREATED) | ||
| + | public ApiDTO createNew(@RequestBody @Validated final NotificationDTO dto, final BindingResult bindingResult) { | ||
| + | if (bindingResult.hasErrors()) { | ||
| + | return ApiDTO.error(); | ||
| + | } | ||
| + | final Notification result = notificationService.save(dto); | ||
| + | return new ApiDTO(result); | ||
| + | } | ||
| </code> | </code> | ||
| Line 4128: | Line 4221: | ||
| [[https://letsencrypt.org/]] free certificate provider (certificate is 90 days with auto renewal)\\ | [[https://letsencrypt.org/]] free certificate provider (certificate is 90 days with auto renewal)\\ | ||
| - | [[https://certbot.eff.org/]] easy AUTOMATIC install | + | [[https://certbot.eff.org/]] easy AUTOMATIC install \\ |
| + | \\ | ||
| + | the certbot-auto script is usually placed in ''/usr/share/'' (as seen in crontab)\\ | ||
| + | |||
| + | ==== Quick way to add domains ==== | ||
| + | you can simply boot the script :\\ | ||
| + | ''cd /usr/share/''\\ | ||
| + | ''sudo ./certbot-auto''\\ | ||
| + | the interface will then present you with the options you can provide a certificate for, it's 1 certificate for all urls you select. | ||
| ===== provide for normal domains ===== | ===== provide for normal domains ===== | ||
| ''sudo ./certbot-auto --apache'' | ''sudo ./certbot-auto --apache'' | ||