安全访问在春季启动中不起作用

时间:2018-09-24 21:52:08

标签: security spring-boot

我在Spring Boot中有一个登录页面,现在我希望该页面仅显示特定链接。 此外,我的ADMIN用户是在启动期间创建的,使用import.sql

完成
INSERT INTO benutzer(id, created_at, anzeigename, benutzername, dienstnummer, passwort) VALUES (nextval('benutzer_idbenutzer_seq'), now(), 'ADMIN', 'ADMIN', '', 'xxx');

INSERT INTO rolle(id, created_at, bezeichnung) VALUES (nextval('benutzer_idbenutzer_seq'), now(), 'ADMIN');

这是我的SecurityConfig类的一部分,该类扩展了WebSecurityConfigurerAdapter

protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
                .antMatchers(
                        "/",
                        "/registration**",
                        "/js/**",
                        "/css/**",
                        "/img/**",
                        "/webjars/**").permitAll()
                .anyRequest().authenticated()
            .and()
                .formLogin()
                    .loginPage("/login")
                        .permitAll()
            .and()
                .logout()
                .logoutSuccessHandler(customLogoutSuccessHandler)
                .permitAll()
            .and()
                .sessionManagement().maximumSessions(1).sessionRegistry(sessionRegistry());
}

这是我的html

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<div sec:authorize="hasRole('ADMIN')">
Should only be shown to ADMIN Users
</div>

也许有人知道我在想什么?

非常感谢您!

2 个答案:

答案 0 :(得分:0)

您写的所有内容都一样,请检查是否缺少某些注释,或者是否以正确的方式创建了admin。 这是一个可以在我的机器上正常工作的小示例:

 @Configuration
 public class SecurityConfigurationCompany extends WebSecurityConfigurerAdapter {
 @Override
 protected void configure(HttpSecurity http) throws Exception {
 http.authorizeRequests()
 .antMatchers("/").permitAll()
 .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
 .antMatchers("/profiles").permitAll()
 .antMatchers("/dislike").hasAuthority("USER")
 .antMatchers("/addParticipant/**").hasAuthority("ADMIN")
 .anyRequest().fullyAuthenticated()
 .and()
 .formLogin().loginPage("/login").failureUrl("/login?error").permitAll()
 .and()
 .logout().logoutSuccessUrl("/");
 }
 }

希望这对您有所帮助是否有用

答案 1 :(得分:0)

我现在能够解决我的问题。 一个问题是我的ADMIN用户使用其用户名注册(用户名已在我的用户表中创建),但未使用其user_role注册。 解决此问题后,为了显示特定内容,我不得不在html文件中放置以下内容:

<div sec:authorize="hasAuthority('ADMIN')">