文档章节

Spring Security使用

y
 yan5845hao
发布于 2017/05/25 15:38
字数 496
阅读 59
收藏 0

重写WebSecurityConfigurerAdapter

package com.uwo.security.roles.configuration;
import com.uwo.security.roles.provider.UwoAuthenticationProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
 * Created by yanhao on 2017/5/24.
 */
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class UwoSecurity extends WebSecurityConfigurerAdapter {
    // 自定义验证
    @Autowired
    private UwoAuthenticationProvider authenticationProvider;
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider);
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/css/**", "/img/**").permitAll()
                .antMatchers("/login").permitAll()
                .anyRequest().authenticated()
            .and()
                .formLogin()
                    .loginPage("/login")
                    .failureUrl("/login?error")
                    .defaultSuccessUrl("/")
                .permitAll()
            .and()
                .logout().permitAll();
    }
}

HttpSecurity使用

  • http过滤
http.addFilter(实现Filter.class)
http.addFilterBefore(实现Filter.class)  
http.addFilterAfter(实现Filter.class)  
  • ExpressionInterceptUrlRegistry配置 (http.authorizeRequests())
// 配置
http.authorizeRequests()
    .antMatchers("无需授权").permitAll()
    // 剩下的请求都需要授权请求
    .anyRequest().authenticated()
  • FormLoginConfigurer 配置(http.formLogin())
// 配置
http.formLogin()
    .loginProcessingUrl("默认自带的登录页面地址")
    .loginPage("控制器路由登录地址")
    .usernameParameter("用户名参数")
    .passwordParameter("密码参数")
    .defaultSuccessUrl("默认成功地址")
    .failureUrl("失败地址")
    .failureForwardUrl("失败跳转地址")
    .failureHandler(实现AuthenticationFailureHandler.class)
    .successHandler(实现AuthenticationSuccessHandler.class)

AuthenticationManagerBuilder使用

// 设置固定权限
auth.inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
// 获取用户信息
auth.userDetailsService(实现UserDetailsService.class)
    // 设置加密算法与密码匹配
      .passwordEncoder(实现PasswordEncoder.class)
// 上面的众合体
auth.authenticationProvider(实现AuthenticationProvider.class)

UserDetailsService实现

package com.uwo.security.roles.service;
import com.uwo.security.roles.pojo.Uwo;
import org.apache.log4j.Logger;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
/**
 * Created by yanhao on 2017/5/24.
 */
@Service
public class UwoService implements UserDetailsService {
    private final Logger log = Logger.getLogger(UwoService.class);
    public UserDetails loadUserByUsername(String user) throws UsernameNotFoundException {
        log.warn("username = " + user);
        Uwo uwo = new Uwo();
        uwo.setUsername("uwo");
        uwo.setPassword("123456");
        uwo.setRole("ADMIN");
        return uwo;
    }
}

AuthenticationProvider实现

package com.uwo.security.roles.provider;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import java.util.Collection;
/**
 * Created by yanhao on 2017/5/25.
 */
@Component
public class UwoAuthenticationProvider implements AuthenticationProvider {
    private final Logger log = Logger.getLogger(UwoAuthenticationProvider.class);
    @Autowired
    private UserDetailsService userDetailsService;
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String username = authentication.getName();
        String password = (String) authentication.getCredentials();
        log.warn("username == " + username + "password == " + password);
        /// 用户名验证实施代码
        UserDetails user = userDetailsService.loadUserByUsername(username);
        /// 用户验证实施代码
        /// 密码加密实施代码
        Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
        return new UsernamePasswordAuthenticationToken(user, password, authorities);
    }
    public boolean supports(Class<?> aClass) {
        return true;
    }
}

PasswordEncoder实现

package com.uwo.security.roles.provider;
import org.apache.log4j.Logger;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
 * Created by yanhao on 2017/5/25.
 */
public class UwoPasswordEncoder implements PasswordEncoder {
    private final Logger log = Logger.getLogger(UwoPasswordEncoder.class);
    /**
     * 密码加密
     * @param password
     * @return
     */
    public String encode(CharSequence password) {
        log.warn("password == " + password);
        return password.toString();
    }
    /**
     * 密码验证
     * @param password
     * @param encodedPassword
     * @return
     */
    public boolean matches(CharSequence password, String encodedPassword) {
        log.warn("password == " + password + " -=- encodedPassword == " + encodedPassword);
        return encodedPassword.equals(password.toString());
    }
}

© 著作权归作者所有

共有 人打赏支持
上一篇: Docker 安装mysql
y
粉丝 7
博文 124
码字总数 22079
作品 0
扬州
程序员
私信 提问
Spring Security 官方文档学习路径

Spring 目前有三个层次的项目,Spring Framework层,Spring Boot层和Spring Cloud层。这三个层次的项目里都有Spring Security的东西,在加上安全和权限控制这块是大多数人的一个弱项,导致官...

写bug的攻城狮
2018/10/25
0
0
Spring Security 5.0.8 和 4.2.8 发布,Spring 安全框架

Spring Security 5.0.8 和 4.2.8 已发布,这些版本主要提供 bug 修复和依赖版本更新以及一些小的改进。 Spring Security 5.0.8 changelog Spring Security 4.2.8 changelog Spring Security ...

淡漠悠然
2018/09/11
470
1
精通Spring Boot——第十六篇:初探Spring Security,使用Http Basic认证

说明 本文以及接下来有关spring security 的文章, 基于Spring Boot 2.1.0 RELEASE , Spring Security 5.1.2RELEASE 简单介绍Spring Security Spring Security是当今非常流行的,基于Spring提...

developlee的潇洒人生
2018/11/25
0
2
使用 Spring Security 构建一个 HTTP 基本认证示例

HTTP基本认证(BA)是一个简单的认证机制。当一个web客户端请求任何受保护的web资源,服务器端就发送回401(未授权)状态码的HTTP响应,响应中还包括 WWW-Authenticate HTTP 头部,如WWW-Authent...

oschina
2013/09/12
14.9K
15
Java for Web学习笔记(一四二)Spring security准备(3)初窥

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flowingflying/article/details/82865058 了解Spring Security的基本知识 完全J2EE的web container也能提供完...

恺风
2018/09/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
1
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
3
0
day22:

1、写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务: 1)使用格式:getinterface.sh [-i interface | -I ip] 2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项...

芬野de博客
昨天
2
0
Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少...

程序猿DD
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部