No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
jdbc:mysql://remoteHost:3306/bdname?autoReconnect=true&useSSL=false
As far as I am concerned, the cause of the issue is that OpenJdk requires TLSv1.2 or TLSv1.3, starting from version 11.0.11. Update: The change will apply to at least OpenJDK 8u292 onward, OpenJDK 11.0.11 onward, and all versions of OpenJDK 16, following the JRE and JDK Crypto Roadmap published by Oracle
Хочу сделать аутентификацию, чтобы запрос приходил с фронта(я делаю только бэк).
public boolean saveUser(UserDto userDto) {
User user = userRepository.findByUsername(userDto.getUsername());
if (user != null) {
return false;
}
user.setRoles(Collections.singleton(new Role(1L, "ROLE_USER")));
user.setUsername(userDto.getUsername());
user.setPassword(bCryptPasswordEncoder.encode(userDto.getPassword()));
userRepository.save(user);
return true;
}
public boolean saveUser(UserDto userDto) {
User userFromDB = userRepository.findByUsername(userDto.getUsername());
if (userFromDB != null) {
return false;
}
User user = new User();
user.setUsername(userDto.getUsername());
user.setPassword(bCryptPasswordEncoder.encode(userDto.getPassword()));
user.setRoles(Collections.singleton(new Role(1L, "ROLE_USER")));
userRepository.save(user);
return true;
}
void addArticleToAuthor(Article article)
author.save()
@org.springframework.stereotype.Controller
public class Controller {
@GetMapping
public String hello() {
return "Hello";
}
}
RestController
. Либо если уж решили использовать Controller
, то добавьте к методу @ResponseBody
@RestController
public class RegistrationController {
@Controller
public class RegistrationController {
registration
@PostMapping("/registrtion")
Converter<S,T>
Оптимальность, чтобы не надо было передавать лишних полей, если они не заносятся в таблицу или автогенерируются
В JSON в поле one-to-many (например при создании юзера у него будут животные) чтобы передавался только массив idшников животных, а не полностью вся информация о них (частично пересекается с первым пунктом - оптимальность)
setPets()
или метод addPet()
/resources/templates/
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.formLogin()
@Controller
@RequiredArgsConstructor
public class HttpErrorController implements ErrorController {
@RequestMapping("/error")
public ModelAndView handleError(HttpServletRequest request) {
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if (status != null) {
int statusCode = Integer.valueOf(status.toString());
// тут при помощи switch case находим код 403 и отдаем нужный шаблон.
}
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/frontend/templates/http-errors");
return modelAndView;
}
@SuppressWarnings("deprecation")
@Override
public String getErrorPath() {
return null;
}
}
Я так понял, что у всего содержимого формы Content-type должен быть multipart/form-data, верно?
e.preventDefault();
The interesting thing to follow here is how the Privileges (and Roles) are mapped to GrantedAuthority entities.This mapping makes the entire security configuration highly flexible and powerful – you can mix and match roles and privileges as granular as necessary, and at the end, they'll be correctly mapped to authorities and returned back to the framework.
hasRole()
, к слову, к значению этого метода автоматически добавляется префикс ROLE_
, а также метод hasAuthority()
, когда проверяются все права (роли и привилегии) и в этом случае для проверки роли нужно указывать префикс ROLE_
самому или уже указать название привилегии (например, READ_PRIVILEGE). SpringApplication loads properties from application.properties files in the following locations and adds them to the Spring Environment:
A /config subdirectory of the current directory
The current directory
A classpath /config package
The classpath root
The list is ordered by precedence (properties defined in locations higher in the list override those defined in lower locations).
mvn spring-boot:run -Dspring-boot.run.arguments=--ftp.host=mysite.com
получить файл (без сортировки, а просто по указанию путь -> названию файла)
1. Это нормально?
2. Почему инжектится "исходный" интерфейс?
Зачем создаётся EmailServiceImpl, если он не используется? Он ведь не используется?
private EmailService emailService = new EmailServiceImpl();
Тут какая-то хитрая магия Spring? Он видит, что есть ИмяИнтерфейсаImpl и учитывает это в процессе? Как это работает?
Как правильно в Spring создавать интерфейсы и правильно их инжектить?
Насколько ок завязываться на логике выброшеного исключения?
@ExceptionHandler