Пример кода доступен на Github в каталоге Spring-MVC-Login-Logout. Он получен из Spring MVC с примером аннотаций.
Индивидуальный поставщик аутентификации
Для реализации нашего собственного способа приема пользовательских запросов на вход в систему нам необходимо реализовать поставщик аутентификации. Следующее позволяет пользователям войти, если их идентификатор идентичен их паролям:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public class MyAuthenticationProvider implements AuthenticationProvider { private static final List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>(); static { AUTHORITIES.add( new SimpleGrantedAuthority( 'ROLE_USER' )); AUTHORITIES.add( new SimpleGrantedAuthority( 'ROLE_ANONYMOUS' )); } @Override public Authentication authenticate(Authentication auth) throws AuthenticationException { if (auth.getName().equals(auth.getCredentials())) { return new UsernamePasswordAuthenticationToken(auth.getName(), auth.getCredentials(), AUTHORITIES); } throw new BadCredentialsException( 'Bad Credentials' ); } @Override public boolean supports(Class<?> authentication) { if ( authentication == null ) return false ; return Authentication. class .isAssignableFrom(authentication); } } |
security.xml
Нам нужно создать файл security.xml:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
xsi:schemaLocation='http://www.springframework.org/schema/beans < http > < intercept-url pattern = '/*' access = 'ROLE_ANONYMOUS' /> < form-login default-target-url = '/' always-use-default-target = 'true' /> < anonymous /> < logout /> </ http > < authentication-manager alias = 'authenticationManager' > < authentication-provider ref = 'myAuthenticationProvider' /> </ authentication-manager > < beans:bean id = 'myAuthenticationProvider' class = 'com.jverstry.LoginLogout.Authentication.MyAuthenticationProvider' /> </ beans:beans > |
Вышеуказанное гарантирует, что все пользователи имеют анонимную роль для доступа к любой странице. После входа они перенаправляются на главную страницу. Если они не входят в систему, они автоматически считаются анонимными пользователями. Функция выхода также объявлена. Вместо того, чтобы заново внедрять колесо, мы используем предметы, поставляемые самой Spring
Главная страница
Мы реализуем главную страницу, отображающую имя пользователя, вошедшего в систему, а также ссылки для входа и выхода:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %> <! doctype html> < html lang = 'en' > < head > < meta charset = 'utf-8' > < title >Welcome To MVC Customized Login Logout!!!</ title > </ head > < body > < h1 >Spring MVC Customized Login Logout !!!</ h1 > Who is currently logged in? < c:out value = '${CurrPrincipal}' /> !< br /> < a href = '<c:url value=' /spring_security_login'/>'>Login</ a > < a href = '<c:url value=' /j_spring_security_logout'/>'>Logout</ a > </ body > </ html > |
контроллер
Нам нужно предоставить текущее имя пользователя для входа в систему:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
@Controller public class MyController { @RequestMapping (value = '/' ) public String home(Model model) { model.addAttribute( 'CurrPrincipal' , SecurityContextHolder.getContext() .getAuthentication().getName()); return 'index' ; } } |
Запуск примера
После компиляции можно начать пример с просмотра: http: // localhost: 9292 / spring-mvc-login-logout /. Будет отображаться следующее:
Войдите, используя тот же идентификатор и пароль:
Приложение возвращается в главное и отображает:
Больше Spring связанных постов здесь .
Приятного кодирования и не забудьте поделиться!
Справка: Пример реализации настроенного входа в систему Spring MVC от нашего партнера JCG Джерома Версринга из блога Технических заметок .