gpt4 book ai didi

java - Spring项目中如何避免映射的重复代码?

转载 作者:行者123 更新时间:2023-11-29 08:21:44 26 4
gpt4 key购买 nike

我目前正在使用 Page Controller映射页面。

每个页面都需要检查Session,这是一个重复代码

如何避免重复此代码?

@Controller
public class PageController {
...
@RequestMapping("/view/List")
public String list(Map<String, Object> model) {
String session_chk = Utils.SessionCheck();
if(session_chk.equals("none")){
return "/view/manager/Login";
}

return "/view/member/List";
}

@RequestMapping("/view/Detail")
public String detail(Map<String, Object> model) {
String session_chk = Utils.SessionCheck();
if(session_chk.equals("none")){
return "/view/manager/Login";
}

return "/view/member/Detail";
}
...

最佳答案

您可以使用 Spring Security 来避免所有与保护您的 Web 应用程序相关的重复代码,它还提供内置保护以防止 session 固定点击劫持跨站请求伪造。它是保护基于 Spring 的应用程序的事实标准。

Here您可以找到一系列不错的教程来学习 Spring Security

Here您可以找到一个小示例,您可以在其中看到我如何仅使用 Spring Security 配置来处理与您类似的情况。

Example Running

这是我的 Spring Security 配置类

@Configuration
@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user1").password(passwordEncoder().encode("user1Pass")).roles("USER")
.and()
.withUser("user2").password(passwordEncoder().encode("user2Pass")).roles("USER")
.and()
.withUser("admin").password(passwordEncoder().encode("adminPass")).roles("ADMIN");
}

@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
// Only users with admin role will access views starting with /admin
.antMatchers("/admin/**").hasRole("ADMIN")
// Anonymous users (users without sessions) will access this URL
.antMatchers("/anonymous*").anonymous()
// Allowing all users to access login page
.antMatchers("/login*").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.html")
.loginProcessingUrl("/perform_login")
.defaultSuccessUrl("/homepage.html", true)
.failureHandler(authenticationFailureHandler())
.and()
.logout()
.logoutUrl("/perform_logout")
.deleteCookies("JSESSIONID")
.logoutSuccessHandler(logoutSuccessHandler())
.and()
.exceptionHandling().accessDeniedPage("/accessDenied");
}

@Bean
public LogoutSuccessHandler logoutSuccessHandler() {
return new CustomLogoutSuccessHandler();
}

@Bean
public AuthenticationFailureHandler authenticationFailureHandler() {
return new CustomAuthenticationFailureHandler();
}

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}

关于java - Spring项目中如何避免映射的重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57176436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com