MVC, Security, AOP Flashcards
Что такое MVC?
схема использования нескольких шаблонов проектирования, с помощью которых модель приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные
Что такое Spring MVC?
Это фреймворк который реализует MVC, каркас основанный на HTTP и сервелатах.
- Ясное и прозрачное разделение между слоями в MVC и запросах.
- Стратегия интерфейсов - каждый интерфейс делает только свою часть работы.
- Интерфейс всегда может быть заменен альтернативной реализацией.
- Интерфейсы тесно связаны с Serlet API.
- Высокий уровень абстракции для вебприложения.
Что такое DispatcherServlet?
Это сервлет, главная задача которого - принимать входные URL и находить правильную комбинацию обработчиков(контроллеров) и отображать (jsэ, html), которые объединяются в страницу или искомый ресурс.
Что такое WebApplicationContext?
“nj расширение обычного ApplicationContext, которое предоставляет конфигурацию для Web приложения и работает с интерфейсом java.servlet.ServletContext
Чем отличается WebApplicationContext от ApplicationContext?
ApplicationContext это главный контекст, он может быть только один на все приложение. WebApplicationContext наследуется от ApplicationContext, его может быть несколько в одном приложении. Каждый DispatcherServlet ассоциируется с отдельным WebApplicationContext.
Для чего предназначена аннотация @Controller в Spring MVC?
Аннотация @Controller указывает, что данный класс играет роль контроллера. Основная цель аннотации @Controller - назначать шаблон данному классу, показывая его роль. Это значит, что диспетчер будет сканировать Contreller -классы на предмет реализованных методов, проверяя @RequestMapping аннотаций.
Для чего предназначена аннотация @RequestMapping в Spring MVC?
Предназначена для маппинга отдельных обработчиков запроса.
Как на один метод-контроллер заманит несколько URL используя @RequestMapping?
@ReuqestMapping(value={“”, “/”, “welcome”}
public String welcomeHandler()
{return(“welcome”);})
Для чего предназначена и где используется аннотация @ModelAttribute в Spring MVC?
@ModelAttribute указывает что параметр играет роль Модели в шаблоне MVC. Это форма хранилища объекта.
Что такое @RequestBody в Spring MVC?
@RequestBody - аннотация указывает что параметр метода - это значение тела HTTP запроса.
Что такое @ResponseBody в Spring MVC?
@ResponseBody - аннотация указывает что возвращаемое значение - это тело HTTP ответа. То есть ответ нужно записать прямо в тело HTTP сообщения, а не передавать с помощью Model или возвращать имя view.
Какие есть конвертеры для тела HTTP запроса в Spring MVC?
ByteArrayHTTPMessageConverter
StringHttpMessageConverter
FormHttpMessageConverter
SourceHttpMessageConverter
Для чего предназначена аннотация @PathVariable в SpringMVC?
Обозначает что параметр метода - это переменная в которой будет значение с URL запроса.
Чем отличаются теги и ?
декларирует общие аннотации: @required, @Autowired, @PostConstruct.
декларирует аннотации которые используются в контроллерах Spring MVC: @RequestMapping, @Controller, @RequestBody, @ResponseBody
Какие есть способы выполнить валидации блинов в Spring MVC?
Использовать стандартные Java EE аннотации (JSR-330) средства: @Size, @NotNull, @Future, @Null, @Pattern.
В классе, экземпляр которого нужно проверить, реализовать интерфейс org.springframework.validation.Validator
Что такое Interceptor в Spring MVC?
В Spring MVC есть возможность производить некие действия перед обработкой запроса, сразу после его обработки и перед отправкой ответа клиенту. Все это можно сделать с помощью так называемых Interceptoror’ов.
Как сделать свой interceptor?
Наследоваться от одного из следующих классов: ConversionServiceExplosingInterceptor HadlerInterceptorAdapter LocaleChangeInterceptor ThemeChangeInteceptor UserRoleAuthorizationInterceptor WebContentInterceptor WebRequestHandlerInperceptorAdapter
Что такое ViewResolver в Spring MVC?
ViewResolver это интерфейс, который предлагает доступ к jsp, html страницам через имя.
Какие вы знаете реализации интерфейса ViewResolver?
XmlViewResolver
ResourseBundleViewResolver
InternalResourseViewResolver
Что такое ContextLoaderListener?
Отвесает за загрузку контекста Web-приложения, когда оно начинает работать.
Какие аннотации в Spring MVC больше всего подойдут для создания RESTful веб сервиса?
Используя аннотации @RestController: @RestController = @Controller + @ResponseBody
Как обрабатывать исключительные ситуации в Spring MVC?
@ExceptionHandler, @ControllerAdvice
Что такое Spring Security?
Spring Security это Java/JavaEE framework предоставляющий механизмы построения системы аутентификации и авторизации, а также другие возможности обеспечения безопасности для корпоративных приложений, созданных с помощью Spring Framework.
Если в основе Spring MVC лежит сервлет, что лежит в основе Spring Security?
Фильтры и их цепочки.
Как получить SecurityContext?
SecurityContextHolder.getContext()
C точки зрения многопоточности, каким есть SecurityContextHolder?
SecurityContextHolder использует ThreadLocal для хранения информации,что означает, что контекст безопасности всегда доступен для методов исполняющихся в том же самом потоке, даже если контекст безопасности явно не передается в качестве аргумента этих методов.
Что представляет собой интерфейс Authentication, какие у него есть методы?
Authentication представляет пользователя (Principal) с точки зрения Spring Security. Методы: getAuthorities() getCredentials() getDetails() getPrincipal() isAuthenticated() setAuthenticated(boolean is Authenticated)
Что такое GrantedAuthority?
GrantedAuthority отражает разрешения, выданные пользователю в масштабе всего приложения, такие разрешения(как правило называются “роли”), например
ROLE_ANONYMOUS
ROLE_USER
ROLE_ADMIN
Что представляет собой интерфейс UserDetails?
UserDetails предоставляет необходимую информацию для построения объекта Authentication из DAO объектов приложения или других источников данных системы безопасности.
Объект UserDetails содержит имя пользователя, пароль, флаги: isAccountNonExpired, isAccountNonLocked, isCredentialsNonExpired, isEnabled и Collection - прав (ролей) пользователя.
Что вы знаете про интерфейс UserDetailsService?
Button единственный метод
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
Этот метод должен проводить поиск пользователя (Principle) по его username.
Если такого нет бросает исключение.
Кто проводит проверку паролей пользователя?
AutheticationManager проверяет UsernamePasswordAutheticationToken (экземпляр интерфейса Authentication )
Возможно ли “вручную” установить аутентификацию пользователя?
Да, возможно
Возможно ли использовать spring security без сессии?
Да, можно
Как получить UserDetails из Security Context?
UserDetails userdetails = (UserDetails)SecurityContextHolder
.getContext
.getAuthentication()
.getPrincipal();
Что определяет интерфейс AuthenticationProvider?
Различные способы авторизации. Реализации: DaoAuthenticationProvider LdapAuthenticationProvider OpenIDAuthenticationProvider RemoteAuthenticationProvider RememberMeAuthenticationProvider
Что такое сквозная функциональность?
Под сквозной функциональностью понимается функциональность, реализовать которую в отдельном компоненте языка традиционными средствами процедурного или объектно-ориентированного программирования или очень сложно, или вообще невозможно, поскольку эта функциональность необходимо в большей части модулей системы. Кроме того, эта функциональность не относится напрямую к предметной области.(logging)
Что такое AOP?
Аспектно-ориентированное программирование - парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули. FJG дополняет объектно-ориентированное программирование, позволяя избавляться в программах от сквозной функциональности. Она появляется в программе тогда, когда реализация рассыпана по различным модулям программы. Сквозная функциональность приводит к рассредоточенному и запутанному коду, сложному для понимания и сопровождения.
Для каких задач используется AOP?
Когда существующий или метод должен знать только то, что он выполняет. Используя AOP, мы разбиваем код на несколько подмодулей, тем самым делая его более читаемым и поддерживаемым.
- Логирование;
- безопасность;
- управление транзакциями;
- контроль производительности;
- управление сессиями.
Что такое Aspect?
Модуль или класс реализующих сквозную функциональность. Аспект изменяет поведение остального кода, применяя совет(Advice) в точках соединения (PinCut), определенных некоторым срезом.
Аннотация @Aspect объявляет класс как аспект.
Что такое Advice?
Это средство оформления кода, которое должно быть вызвано из точки соединения. Advice может быть выполнен до, после или вместо точки соединения.
Какие аннотации в Spring AOP реализуют функциональность Advice?
@Before @After @AfterReturing @Around @AfterThrowing
Что такое точка соединения(Join point)?
Точка в выполняемой программе, где следует применить совет. Многие реализации АОП позволяют использовать вызовы методов и обращения к полям объекта в качестве точек соединения.
Что такое PointCut?
Набор JoinPoint. Срез определяет, подходит ли данная точка соединения к данному совету.
Используется аннотация @PointCut
Какие недостатки AOP подхода?
Тесная связь между аспектом и компонентом делает аспект зависимым от компонента и при этом нарушается одна из основных идей FJG - независимость компонентов от применяемых к нему аспектов.
Может привести к снижению производительности в больших системах если использовать “тяжелые объекты”
Какие существуют реализации AOP?
AspectJ
AspectWerkz
Boss AOP
Spring AOP