私は自分のウェブサイトにSpring Securityを実装しようとしています。私はこれまでこれをやっており、それは魅力のように働く。以下のコードは動作していますが、データベースを認証する前に確認したいフィールドが他にもあります。私が欲しいのは、 "deletedByRecommender"と "deletedByAdministrator"というフィールドがユーザを認証する前にfalseであるかどうかをチェックすることです。ユーザーが完全に有効になっているかどうかを確認するだけでなく、ユーザーが有効になっていないとログインできないという理由でユーザーにメッセージを出力したい。私はフィルターを探していたが、それを動作させることができなかった。これをどうやって作るの?春のセキュリティ:データベースの余分なフィールドが偽であるかどうかをチェックし、ユーザに通知できない理由を知らせてください。
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Recommendation Book</title>
<script type="text/javascript">
</script>
</h:head>
<h:body>
<div class="Geral">
<h:form name="f" method="post">
\t <table>
\t \t <tr><td>E-mail:</td><td><input type="email" name="username" value="" /></td></tr>
\t \t <tr><td>Password:</td><td><input type="password" name="password" value="" /></td></tr>
\t \t <tr><td>Remember Me:</td><td><input type="checkbox" name="remember-me" /></td></tr>
\t \t <tr><td><input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/></td></tr>
\t \t <tr><td></td><td><input name="submit" type="submit" value="Login" /></td></tr>
\t \t <c:if test="${param.error != null}">
\t \t <tr><td colspan="2" style="color:red">Invalid email and password.</td></tr>
\t \t </c:if>
\t \t <c:if test="${param.logout != null}">
\t \t <tr><td colspan="2" style="color:red">You have been logged out.</td></tr>
\t \t </c:if>
\t </table>
</h:form>
</div>
</h:body>
</html>
package recBook;
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
\t public SecurityWebApplicationInitializer() {
\t \t super(WebSecurityConfig.class);
\t }
}
package recBook;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.*;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
\t @Autowired
\t private DataSource dataSource;
\t @Autowired
\t public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
\t \t auth
\t \t \t .jdbcAuthentication()
\t \t \t \t .dataSource(dataSource).passwordEncoder(passwordEncoder());
\t }
\t
\t @Bean
\t public BCryptPasswordEncoder passwordEncoder() {
\t \t return new BCryptPasswordEncoder();
\t }
\t
\t @Bean(name = "dataSource")
\t public DriverManagerDataSource dataSource() {
\t DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
\t driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
\t driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/RecBookSpringDB");
\t driverManagerDataSource.setUsername("root");
\t driverManagerDataSource.setPassword("**************");
\t return driverManagerDataSource;
\t }
\t
\t @Override
\t protected void configure(HttpSecurity http) throws Exception {
\t \t http
\t \t \t .authorizeRequests()
\t \t \t \t .antMatchers("/index.jsf", "/userPage.jsf").permitAll()
\t \t \t \t .antMatchers("https://stackoverflow.com/users/**").permitAll()
\t \t \t \t .antMatchers("/admin/**").hasAuthority("Administrator")
\t \t \t \t .anyRequest().authenticated()
\t \t \t \t .and()
\t \t \t .formLogin().failureUrl("/login.jsf?error")
\t \t \t \t .loginPage("/login.jsf")
\t \t \t \t .permitAll()
\t \t \t \t .and()
\t \t \t .logout()
\t \t \t \t .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
\t \t \t \t .permitAll()
\t \t \t \t .logoutSuccessUrl("/login.jsf?logout=true")
\t \t \t \t .and()
\t \t \t .rememberMe().rememberMeParameter("remember-me")
\t \t \t \t .and()
\t \t \t .exceptionHandling().accessDeniedPage("/accessDenied.xhtml")
\t \t \t \t .and()
\t \t \t .csrf();
\t }
}
CREATE TABLE users (
\t id SERIAL AUTO_INCREMENT,
\t username VARCHAR(100) NOT NULL,
\t password VARCHAR(150) NOT NULL,
\t enabled TINYINT NOT NULL DEFAULT 1,
\t deletedByRecommender BOOLEAN NOT NULL DEFAULT '0',
\t deletedByAdministrator BOOLEAN NOT NULL DEFAULT '0',
\t deleteReason CHAR(255) NULL DEFAULT 'Approved',
\t lastUpdatedOn TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
\t createdOn TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
\t PRIMARY KEY (username)
);
([春のセキュリティが強化された追加のパラメータをチェック] http://stackoverflow.com/questions/27658030/check-extra-parameters-with-spring-の可能性のある重複セキュリティ)。これについては、多くのスレッドがあります。これはかなり包括的な答えを持っています。 –