然后编写configure Bean(和上一个不一样,参数不同),实现security验证逻辑,代码如下:
@Override protected void configure(HttpSecurity http) throws Exception { http .csrf() //跨站 .disable() //关闭跨站检测 .authorizeRequests()//验证策略策略链 .antMatchers("/public/**").permitAll()//无需验证路径 .antMatchers("/login").permitAll()//放行登录 .antMatchers(HttpMethod.GET, "/user").hasAuthority("getAllUser")//拥有权限才可访问 .antMatchers(HttpMethod.GET, "/user").hasAnyAuthority("1","2")//拥有任一权限即可访问 //角色类似,hasRole(),hasAnyRole() .anyRequest().authenticated() .and() .formLogin() .loginPage("/public/unlogin") //未登录跳转页面,设置了authenticationentrypoint后无需设置未登录跳转页面 .loginProcessingUrl("/public/login")//处理登录post请求接口,无需自己实现 .successForwardUrl("/success")//登录成功转发接口 .failureForwardUrl("/failed")//登录失败转发接口 .usernameParameter("id") //修改用户名的表单name,默认为username .passwordParameter("password")//修改密码的表单name,默认为password .and() .logout()//自定义登出 .logoutUrl("/public/logout") //自定义登出api,无需自己实现 .logoutSuccessUrl("public/logoutSuccess") }到这里便可实现security与springboot的基本整合。
四、实现记住我功能 1、 建表记住我功能需要数据库配合实现,首先要在数据库建一张表用户保存cookie和用户名,数据库建表语句如下:不能做修改
CREATE TABLE `persistent_logins` ( `username` varchar(64) NOT NULL, `series` varchar(64) NOT NULL, `token` varchar(64) NOT NULL, `last_used` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`series`) ) 2、 编写rememberMeservice Bean代码如下:
@Bean public RememberMeServices rememberMeServices(){ JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl(); jdbcTokenRepository.setDataSource(dataSource); PersistentTokenBasedRememberMeServices rememberMeServices = new PersistentTokenBasedRememberMeServices("INTERNAL_SECRET_KEY",securityUserService,jdbcTokenRepository); //还可设置许多其他属性 rememberMeServices.setCookieName("kkkkk"); //客户端cookie名 return rememberMeServices; }dataSource为@Autowired引入
3、 配置文件设置remember在config(HttpSecurity http)中加入记住我功能
.rememberMe() .rememberMeServices(rememberMeServices()) .key("INTERNAL_SECRET_KEY")在登录表单中设置remember-me即可实现记住我功能。