spring security session ajax,springboot+mybatis+security ajax实现session保存User实体

AuthorityTeacher

import org.springframework.security.core.GrantedAuthority;

import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;

import java.util.List;

/**

* @ProjectName: teaching

* @Package: cn.bdqn.entity

* @Author: huat

* @Date: 2020/12/28 12:43

* @Version: 1.0

* 教师实体类

*/

public class AuthorityTeacher implements UserDetails {

private int teacherId;

private String username;//账号

private String password;//密码

private String teacherName;//真实名称

private List authorityRoles;

public int getTeacherId() {

return teacherId;

}

public void setTeacherId(int teacherId) {

this.teacherId = teacherId;

}

public void setUsername(String username) {

this.username = username;

}

public void setPassword(String password) {

this.password = password;

}

//@Override

public String getPassword() {

return password;

}

public String getTeacherName() {

return teacherName;

}

public void setTeacherName(String teacherName) {

this.teacherName = teacherName;

}

@Override

public String getUsername() {

return username;

}

public List getAuthorityRoles() {

return authorityRoles;

}

public void setAuthorityRoles(List authorityRoles) {

this.authorityRoles = authorityRoles;

}

@Override

public Collection extends GrantedAuthority> getAuthorities() {

return authorityRoles;

}

@Override

public boolean isAccountNonExpired() {

return true;

}

@Override

public boolean isAccountNonLocked() {

return true;

}

@Override

public boolean isCredentialsNonExpired() {

return true;

}

@Override

public boolean isEnabled() {

return true;

}

}

Role

import org.springframework.security.core.GrantedAuthority;

/**

* @ProjectName: teaching

* @Package: cn.bdqn.entity

* @Author: huat

* @Date: 2020/12/28 13:09

* @Version: 1.0

* 角色实体类

*/

public class AuthorityRole implements GrantedAuthority {

private int roleId;

private String roleName;//角色

private String roleNameCN;//角色中文

@Override

public String getAuthority() {

return roleName;

}

public int getRoleId() {

return roleId;

}

public void setRoleId(int roleId) {

this.roleId = roleId;

}

public String getRoleName() {

return roleName;

}

public void setRoleName(String roleName) {

this.roleName = roleName;

}

public String getRoleNameCN() {

return roleNameCN;

}

public void setRoleNameCN(String roleNameCN) {

this.roleNameCN = roleNameCN;

}

}

service

import org.springframework.security.core.userdetails.UserDetailsService;

/**

* @ProjectName: teaching

* @Package: cn.bdqn.service.admin

* @Author: huat

* @Date: 2020/12/28 16:23

* @Version: 1.0

*/

public interface TeacherService extends UserDetailsService {

}

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.security.core.userdetails.UserDetails;

import org.springframework.security.core.userdetails.UsernameNotFoundException;

import org.springframework.stereotype.Service;

/**

* @ProjectName: teaching

* @Package: cn.bdqn.service.admin

* @Author: huat

* @Date: 2020/12/28 16:24

* @Version: 1.0

*/

@Service

public class TeacherServiceImpl implements TeacherService {

@Autowired

private TeacherDao teacherDao;

@Override

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

return teacherDao.getAuthorityTeacherByUsername(username);

}

}

权限配置类

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

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;

import org.springframework.security.crypto.password.PasswordEncoder;

import org.springframework.security.web.authentication.AuthenticationFailureHandler;

import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

/**

* @ProjectName: teaching

* @Package: cn.bdqn.filter

* @Author: huat

* @Date: 2020/12/28 12:24

* @Version: 1.0

*/

@Configuration

@EnableWebSecurity

public class SpringSercurityConfig extends WebSecurityConfigurerAdapter {

@Autowired

TeacherService teacherService;

@Autowired

AuthenticationSuccessHandler authenticationSuccessHandler;//ajax登陆成功使用

@Autowired

AuthenticationFailureHandler authenticationFailureHandler;//ajax登陆失败使用

@Bean

public PasswordEncoder passwordEncoder(){

return new MD5Util();

}

/**

* 将账号密码设置在数据库当中

* @param auth

* @throws Exception

*/

@Override

public void configure(AuthenticationManagerBuilder auth) throws Exception {

auth

//将UserDetailsService放到容器中

.userDetailsService(teacherService)

//加密方式放入

.passwordEncoder(passwordEncoder());

}

/**

* 权限配置

* @param http

* @throws Exception

*/

@Override

protected void configure(HttpSecurity http) throws Exception {

//释放静态资源,指定资源拦截规则,

// 指定自定义认证页面,指定退出认证配置,csrf(跨域伪造请求)配置

http.authorizeRequests()

.antMatchers("intoLogin","login.jsp","/webapp/**").permitAll()//释放这些资源,允许匿名访问

.antMatchers("/**").hasAnyRole("ADMIN","USER")

.anyRequest().authenticated()//其他资源需要认证

.and()

.formLogin()

.loginPage("/intoLogin")//登陆页请求的接口

.loginProcessingUrl("/doLogin")//登陆地址,由springSecurity提供

.usernameParameter("username")//登陆账号的name值

.passwordParameter("password")

.successHandler(authenticationSuccessHandler)//登陆成功

.failureHandler(authenticationFailureHandler)//登陆失败

.permitAll()//指定所有资源释放

.and()

.logout()//登出

.logoutUrl("/logout")//指定登出路径

.logoutSuccessUrl("/login.jsp")//登出成功后跳转的url

.invalidateHttpSession(true)//是否清空session

.permitAll()

.and()

.csrf()

.disable();//关闭csrf(跨域伪造请求)

}

}

import com.alibaba.fastjson.JSON;

import org.springframework.security.core.AuthenticationException;

import org.springframework.security.web.authentication.AuthenticationFailureHandler;

import org.springframework.stereotype.Component;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.HashMap;

import java.util.Map;

/**

* @ProjectName: teaching

* @Package: cn.bdqn.filter

* @Author: huat

* @Date: 2020/12/29 9:14

* @Version: 1.0

*/

@Component

public class MyAuthenticationFailureHandler implements AuthenticationFailureHandler {

@Override

public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {

Map map=new HashMap();

map.put("code",1);

map.put("msg","账号密码错误");

map.put("data","");

/* httpServletResponse.setContentType("application/json;charset=utf-8");*/

PrintWriter out = httpServletResponse.getWriter();

out.write(JSON.toJSONString(map));

out.flush();

out.close();

}

}

登陆成功

import com.alibaba.fastjson.JSON;

import org.springframework.security.core.Authentication;

import org.springframework.security.core.context.SecurityContextHolder;

import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

import org.springframework.stereotype.Component;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.HashMap;

import java.util.Map;

/**

* @ProjectName: teaching

* @Package: cn.bdqn.filter

* @Author: huat

* @Date: 2020/12/29 9:16

* @Version: 1.0

*/

@Component

public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {

@Override

public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {

Authentication auth = SecurityContextHolder.getContext().getAuthentication();

if(null!=auth){

httpServletRequest.getSession().setAttribute("user",auth.getPrincipal());

}

Map map=new HashMap();

map.put("code",0);

map.put("msg","登陆成功");

map.put("data","");

/* httpServletResponse.setContentType("application/json;charset=utf-8");*/

PrintWriter out = httpServletResponse.getWriter();

out.write(JSON.toJSONString(map));

out.flush();

out.close();

}

}

来源:oschina

链接:https://my.oschina.net/u/3535099/blog/4867985

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值