如何为未注册和已注册用户分隔内容

时间:2018-11-27 19:20:13

标签: java spring spring-mvc spring-boot spring-security

问题是:

该网站为尚未注册的人提供一种内容,为已经注册并登录的人提供另一种内容。当我进入该网站时,我被抛到 / login 页面上已在Spring Security中指示,并且该页面不允许我登录之前进入任何地方。但是我需要把我扔到未注册用户的主页入口处,以便我可以查看有关事件的信息,等等。 ,然后注册或登录。我几乎决定,我添加了Spring Security类 .loginPage(“ / index”)而不是(“ / login”) +添加了antMatchers,他在其中指示了未注册用户可以访问的所有页面。但有一个问题。如图所示。我的样式无效,它也停止显示图片。enter image description here enter image description here

我添加到antMatchers “ / resources / **” ,但这无济于事。另外,当我从主页转到“登录”选项卡,并尝试通过输入登录名和密码登录时,输入错误

  

“不支持请求方法“ POST”   org.springframework.web.HttpRequestMethodNotSupportedException:   “

”不支持请求方法“ POST”

我的Sping安全代码在更新之前-

   @Configuration
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

        @Qualifier("userDetailsServiceImpl")
        @Autowired
        private UserDetailsService userDetailsService;

        @Autowired
        private SimpleAuthenticationSuccessHandler successHandler;

        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth
                    .userDetailsService(userDetailsService);
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .authorizeRequests()
                    .antMatchers("/admin/**").hasAnyRole("ADMIN")
                    .antMatchers("/runner/**").hasAnyRole("RUNNER","ADMIN")
                    .antMatchers("/coordinator/**").hasAnyRole("COORDINATOR","ADMIN")
                      .anyRequest().authenticated().and()
                    .formLogin()
                      .loginPage("/login")
                      .successHandler(successHandler)
                      .permitAll().and()
                    .logout()
                      .permitAll();
        }

        @Override
        public void configure(WebSecurity web) throws Exception {
            web
                    .ignoring()
                    .antMatchers( "/static/**", "/css/**", "/js/**","/error");
        }
    }

我的Sping安全代码在更新后-其余相同

       @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/admin/**").hasAnyRole("ADMIN")
                .antMatchers("/runner/**").hasAnyRole("RUNNER","ADMIN")
                .antMatchers("/coordinator/**").hasAnyRole("COORDINATOR","ADMIN")
                  .antMatchers( "/aboutEvent","/marathonCompare","/charityOrgList",
                          "/calculatorBMI","/calculatorBMR","/learnMore","/registerAsRunner","/becomeSponsor","/",
                          "/allResults","/interactiveMap","/becomeRunner","/login","/resources/**").permitAll()
                  .anyRequest().authenticated().and()
                .formLogin()
                  .loginPage("/index")
                  .successHandler(successHandler)
                  .permitAll().and()
                .logout()
                  .permitAll();
    }

登录控制器

@Controller
public class LoginController {

    @GetMapping("/login")
    public String login(){

        return "login/login";
    }
}

登录页面

 <!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
          integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
          crossorigin="anonymous" th:href="@{/webjars/bootstrap/4.1.3/css/bootstrap.min.css}">

    <link rel="stylesheet" type="text/css" media="all" th:href="@{/css/runnerstyle/register.css}"/>
</head>
<body class="align">

<div class="register-top flex-container">
    <form th:action="@{/index}">
        <button type="submit" class="register-back">Назад</button>
    </form>
    <h1><b>MARATHON SKILLS 2018</b></h1>
</div>

<div class="login-middle">
    <div class="login-text">
        <h2>Форма авторизации<br/></h2>
        <h4>Пожалуйста, авторизуйтесь в системе, используя ваш адресс электронной почты<br>
        и пароль.
        </h4>
    </div>

    <div th:if="${param.error}" class="alert alert-danger">
        <p>Invalid username or password</p>
    </div>

    <div th:if="${param.logout}" class="alert alert-success">
        <p>You've been logged out</p>
    </div>

    <form th:action="@{/login}" method="post" class="form-input">
        <table>
            <tr th:class="${param.error} ? 'form-group has-error' : 'form-group'">
                <th><h4>Email:</h4></th>
                <th style="padding-left: 20px">
                    <input type="email" id="username" name="username" placeholder="Enter your email address" size="60px" class="input-field">
                </th>
            </tr>
            <tr th:class="${param.error} ? 'form-group has-error' : 'form-group'">
                <th><h4>Password:</h4></th>
                <th style="padding-left: 20px">
                    <input type="password" id="password" name="password" placeholder="Enter your email password" size="60px" class="input-field">
                </th>
            </tr>
            <tr>
                <th></th>
                <th style="padding-right: 13vw;">
                    <button type="submit" class="login-button">Login</button>
                    <a href="#" th:href="@{'/'}" class="href">Cancel</a>
                </th>
            </tr>
        </table>
    </form>
</div>

<div class="register-bot">
    18 дней 8 часов и 17 минут осталось до старта марофона!
</div>


</body>
</html>

索引控制器

@Controller
public class IndexController {

    @GetMapping({"/","/index",""})
    public String getIndexPage(){
        return "index";
    }

    @GetMapping("/registerAsRunner")
    public String registerRunner(){
        return "runner/createOrRegister";
    }

    @GetMapping("/learnMore")
    public String getLearnMorePage(){return "learnmore/main";}
}

我该如何解决此问题并做我想做的事情?谢谢!

0 个答案:

没有答案
相关问题