Differences

This shows you the differences between two versions of the page.

Link to this comparison view

java:new-app-v2 [05/09/2017 09:50]
Anthony Arents [New Java Web Applications]
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.10.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''