From 225e89df5d77eabd5bc874b92b4a930100115e73 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 8 May 2025 15:54:59 +0900 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=A4=A7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/co/jp/app/config/SecurityConfig.java | 15 --- .../co/jp/app/controller/LoginController.java | 37 -------- .../java/co/jp/app/service/UploadService.java | 23 ----- .../java/co/jp/app/service/UserService.java | 86 +++++++++++------- .../jp/app/controller/loginController.class | Bin 1617 -> 1204 bytes .../jp/app/controller/uploadController.class | Bin 1109 -> 1109 bytes .../classes/co/jp/app/entity/UserEntity.class | Bin 1400 -> 1499 bytes .../jp/app/repository/uploadRepository.class | Bin 916 -> 916 bytes .../co/jp/app/repository/userRepository.class | Bin 884 -> 667 bytes .../co/jp/app/service/uploadService.class | Bin 988 -> 988 bytes .../co/jp/app/service/userService.class | Bin 922 -> 1640 bytes 11 files changed, 54 insertions(+), 107 deletions(-) delete mode 100644 src/main/java/co/jp/app/config/SecurityConfig.java delete mode 100644 src/main/java/co/jp/app/controller/LoginController.java delete mode 100644 src/main/java/co/jp/app/service/UploadService.java diff --git a/src/main/java/co/jp/app/config/SecurityConfig.java b/src/main/java/co/jp/app/config/SecurityConfig.java deleted file mode 100644 index 5a7fcb2..0000000 --- a/src/main/java/co/jp/app/config/SecurityConfig.java +++ /dev/null @@ -1,15 +0,0 @@ -package co.jp.app.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; - -@Configuration -public class SecurityConfig { - - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } -} diff --git a/src/main/java/co/jp/app/controller/LoginController.java b/src/main/java/co/jp/app/controller/LoginController.java deleted file mode 100644 index c54bcbd..0000000 --- a/src/main/java/co/jp/app/controller/LoginController.java +++ /dev/null @@ -1,37 +0,0 @@ -package co.jp.app.controller; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import co.jp.app.entity.ErrorEntity; -import co.jp.app.entity.UserEntity; -import co.jp.app.service.ErraService; -import co.jp.app.service.UserService; - - -@CrossOrigin("http://192.168.1.50:5173") -@RestController("/api/login") -public class LoginController { - - @Autowired - private UserService userService; - - @Autowired - private ErraService erraService; - - @GetMapping("/status") - public String getStatusByNameOrEmail() { - String input="aaa"; - - if (userByName == null && userByEmail == null) { - return "全項目に入力してください"; - } - - // 如果有找到,就固定使用 ID 1001 去查 erraEntity - ErrorEntity erra = erraService.getStatusById(1001); - - return erra.getStatus(); - } -} diff --git a/src/main/java/co/jp/app/service/UploadService.java b/src/main/java/co/jp/app/service/UploadService.java deleted file mode 100644 index d1fd207..0000000 --- a/src/main/java/co/jp/app/service/UploadService.java +++ /dev/null @@ -1,23 +0,0 @@ -package co.jp.app.service; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import co.jp.app.entity.PetEntity; -import co.jp.app.repository.UploadRepository; - -@Service -public class UploadService { - - @Autowired - private UploadRepository uploadDao; - - public List saveAll(Iterable entities) { - - return uploadDao.saveAll(entities); - - } - -} diff --git a/src/main/java/co/jp/app/service/UserService.java b/src/main/java/co/jp/app/service/UserService.java index 78d0d25..c024fb9 100644 --- a/src/main/java/co/jp/app/service/UserService.java +++ b/src/main/java/co/jp/app/service/UserService.java @@ -1,52 +1,74 @@ package co.jp.app.service; -import jakarta.transaction.Transactional; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import co.jp.app.dto.RegistrationDto; +import co.jp.app.entity.UserEntity; +import co.jp.app.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; -import co.jp.app.entity.UserEntity; -import co.jp.app.repository.UserRepository; - +import co.jp.app.entity.PetEntity; +import co.jp.app.repository.UploadRepository; +import org.springframework.transaction.annotation.Transactional; @Service -public class UserService { +public class UserService implements UserDetailsService { - private final UserRepository userEntityRepository; + private final UserRepository userRepository; + private final PasswordEncoder passwordEncoder; @Autowired - public UserService(UserRepository userEntityRepository, PasswordEncoder passwordEncoder ) { - this.userEntityRepository = userEntityRepository; + public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) { + this.userRepository = userRepository; this.passwordEncoder = passwordEncoder; } - @Transactional // 整个注册过程应该是一个事务 - public UserEntity registerNewUser(String name, String email, String rawPassword) throws Exception { - // 1. 检查邮箱是否已被注册 - if (userEntityRepository.existsByEmail(email)) { - throw new Exception("错误:该邮箱地址已被注册!"); // 或者自定义异常 + @Transactional + public UserEntity registerNewUser(RegistrationDto registrationDto) throws Exception { + + if (userRepository.existsByEmail(registrationDto.getEmail())) { + throw new Exception("错误:邮箱 " + registrationDto.getEmail() + " 已被注册!"); } - // (可选) 检查用户名是否已被注册 (如果您有用户名字段) - // if (userEntityRepository.existsByUsername(username)) { - // throw new Exception("错误:该用户名已被注册!"); - // } - - // 2. 创建新的 UserEntity 对象 UserEntity newUser = new UserEntity(); - newUser.setName(name); - newUser.setEmail(email); + newUser.setName(registrationDto.getName()); + newUser.setEmail(registrationDto.getEmail()); + newUser.setPassword(passwordEncoder.encode(registrationDto.getPassword())); - // 3. 对密码进行哈希加密 (非常重要!) - // String hashedPassword = passwordEncoder.encode(rawPassword); - // newUser.setPassword(hashedPassword); - newUser.setPassword(rawPassword); // 实际项目中必须加密!这里为了简化先直接赋值 - - // 4. 设置其他默认属性,例如账户状态、角色等 (如果需要) - // newUser.setActive(true); - // newUser.setRoles(...); - - // 5. 保存新用户到数据库 - return userEntityRepository.save(newUser); + return userRepository.save(newUser); } + + @Override + @Transactional(readOnly = true) + public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { + UserEntity userEntity = userRepository.findByEmail(email) + .orElseThrow(() -> new UsernameNotFoundException("未找到邮箱为: " + email + " 的用户")); + + Collection authorities = Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")); // 示例:给所有用户一个ROLE_USER权限 + + return new User( + userEntity.getEmail(), + userEntity.getPassword(), + true, // enabled + true, // accountNonExpired + true, // credentialsNonExpired + true, // accountNonLocked + authorities // 用户的权限集合 + ); + } + + public boolean checkPassword(UserEntity user, String rawPassword) { + return passwordEncoder.matches(rawPassword, user.getPassword()); + } + } diff --git a/target/classes/co/jp/app/controller/loginController.class b/target/classes/co/jp/app/controller/loginController.class index 44f94d42c7f91c740c069bb7e0fa0e83cce40cf4..aaa222a612694dc34cffd7bf8cba2e117385c0fb 100644 GIT binary patch delta 386 zcmcb}vxSrE)W2Q(7#J9A8H^@!#q#^)r)TCl=jW9a<>%z27ER7#RAF%~DoUIJ(-p< z`b_@7baV7=@Ajt<-BLyTCfox^4nF?^4Up3{fmkb=fw7oD8z`y+HdPlaD-PuA!DaOsI1E6XVg^G1dN?*4 delta 780 zcmaJ;OKTHR7(I8AcFZ_^SWNm#Vr!GONmIu@e6+DzQ)4%2H_?TNi!lr#b(+M<7zij~ zz<{`sFo;M&3Ze*tWKptE=(gz2U*KX0(zW~IH`8drf-v`swx`8$wwtct3L_29efk5+L%_faxSAV^kfx%UEWj@m1JJe z=@o{V$<&5imL*lrXQi~R-m;tyt0hY+B}P z?hdK>#eJFSLN^$q^md(uQ-qvt{@58qhZ7Mqf4F?r>2^G5>gR}y6c37!aGsFf4-u*p zBiv%C+A_aM3;JZX(p6EEnufLGZK> z(O-Z%1>vn?gy<;kVQMnrNSHrt)0W^OoW&eT5iyQ=Tp$@<%DG6)MLC_ggv)SafeOQXBhTSuF|@87p#P3%DzsK91_m$KtIuyzt=aAw0Q|Pe*=N`w9Ehi diff --git a/target/classes/co/jp/app/controller/uploadController.class b/target/classes/co/jp/app/controller/uploadController.class index 936a46c204abcf1f745af8b8f09ab606760e49d4..e076c44069ae61ca3b7420adf2bf7793152c8a9a 100644 GIT binary patch delta 34 ncmcc0ag}324P)rUT74j~7DU|rz!*CD9OFC2(9L_9W-tN(@f8i& delta 34 ncmcc0ag}324P)uVT74j~7DU|rz*su@9OFC2(#?CBW-tN(`;`uO diff --git a/target/classes/co/jp/app/entity/UserEntity.class b/target/classes/co/jp/app/entity/UserEntity.class index 814609f21e12a325ca1e51d952854f2baf55a983..9864bfea70ebe5cfdbce217878ceb7bb9cff1d68 100644 GIT binary patch literal 1499 zcmaizZBG+H5XWarAAlCiV+8>f1#Ce$5y2NIi9s|?5Q)?#@@{E2W$}7f@Afo&CtqkH zG4X{Tzz=2o&s_uNxaymoo1NMJ{&r^W*Y6)ciRdXk9;6iYY3xXMjGupzMy&NzL%bnR!4ch_Kk8H%6h3BKOb!i7`3u?Y$zjgMX z6A-PPb;1+X=ezs0YVDn%$;3OVP3X=fhIU*#XgdgJ14n-dR39oY0O16-E%5^O38mR_ zn4Z^xp_pl==KrBQao?nXg-XJC@=sAzX;Yl5Lt&6u$iUrB)*2Kcd_!{L^J`I z63yd_agam{vMU|Q_K#BCAO zWh#bD4-%P1;!Kr9rnO|IkvP)|m{xl*MI+K>8Vi{oCNho3nbs1S){~jW<4hZ1+U&s; V4Q7|A6t?G4xNd|a&!e+R^apQ~^1T26 literal 1400 zcmah|T~8B16g^W~3T3f?fPAVTXj_C8d_+l%pxLA%k=n$^p`Db$cDLD`YWPn+Xd*H3 z!5`p{GM-tmm9pr|y>n;IJ#+TV-Jid{{{Zk5k8?<2Ad9qv3M({doJG#T2poa=THv0vUDA8{3xVhJ(E2$f%aoO}jJhU;;M!e(SaWctnjM$GBna{t1!}$QGQLiFO{!CX;i%`n;o@Hw#eAJar&PQl2%UJ zafi3Nw_oup?*wKN@9^s6O+OFn{NQ|9`)a?_I#OXpQlhmWsL5tkhT7H_n`v{bsd=&d z4--k6Z78!J8#!4hUbT{d=nr73aP_=c<*U9@<~XPy$dEjS&d>s~?pfol8{K7wyViU@ zwa1s?fvwU7&$6U6*CRw6bl+lxh+dUD3_4*=z0mfP^Sw#fu z^f~I{dMnL-m%x3ZGBlb=;6b9M(SA*fiJA(@nnwFIEm70*HJYr)T}}B|QxT;EpT<7% z@Nb`16E&^jAyJoonm@x>zosHJm9EjW9*@U`PwTO!jYOX&`+ZtZ)Z`}nG}*6dlbW`! X(PU?^>(g{>#iKZG#&c}vZVUJgE$`j| diff --git a/target/classes/co/jp/app/repository/uploadRepository.class b/target/classes/co/jp/app/repository/uploadRepository.class index 562f6ae9e575b8e9a942159be16b69e618d2ddca..dde1f62bb2af4c6ea6f96ce1273d59670792e44a 100644 GIT binary patch delta 24 gcmbQjK81aPK4a)agNKZvn}rxBGctxwUdHqe0APCv9RL6T delta 24 gcmbQjK81aPK4a-bgNKZzn}rxBGcuM=UdHqe0A#xeeEp^UR^ z!mbH1#zWK2r1QSD^ZqaBby|z<+=g@ZMW&q0!Y9sM1 zcq~-J+r1I?eE=&AjSipCEPSXPNtF~z}C&?=ztV6A8o<=#ogWx{4=nVp4-zsf5d z`~m(bi?<5}YlV22>FM6yey?BmpTC#CiReA8E>J)-HL5hIO0$Aq^{pHxl9NO_mDp5! z>&7xml{>t31AIG~n6E57{i4sGUh#{2`Slb{B6 zF@VJi(hM!a+lC*&&b{5ZAQ8~7B4Y{nEb<6{G;yz7=g>oH!9zAJ(<6L;jCU27Fe^9> mf!GtArzv7k=zf^mBusM(OuG!zz6YiaX3r20=sCS8?8_^hkl{f9 diff --git a/target/classes/co/jp/app/service/uploadService.class b/target/classes/co/jp/app/service/uploadService.class index 354dca08cb150464e05d9609a22aad659afd3f63..8d714834cb936e2df039235b255e6066113df6f7 100644 GIT binary patch delta 35 ncmcb^eusTRG-K$*7(*b@X9^^aJYfvoypmCn5lHQ3Qe*@G>HiE2 delta 35 ncmcb^eusTRG-K(+7(*b@X9^^aJYg)|ypmCn5lHQ3Qe*@G^#2U3 diff --git a/target/classes/co/jp/app/service/userService.class b/target/classes/co/jp/app/service/userService.class index 9a0337a7eb38c363386371011b6935aed63c7e11..c5c1d660e895e88d3a76c9d84d52b0f1698e1ae5 100644 GIT binary patch literal 1640 zcmbtU&2JM&6#tFA$tI2sX+j822#|&ZI|&S5Z7GI;LFvh)5dll|HrY(VCeH3^cAVf_ z+e1%1_Cf`hN|h=h5k3>~A?UgPMA1V=uF}Z zbTJHlh7ChX-f}}7UaCwk3%A73lPNS(n$gPj7IN7iZ0up^Zfs26a%7-g-)qBOh9mEO zyS=rx_WtGXTWf#5`}zLc`wutoJlMSZPQk9WErebtVo8D=De$=%w?OXsHqs{GoMwAg0B{M7#RNM72%_>OH^~Gtf;o! zQI$aZJgDK}+rTD0$Dflbmn{;o%Oo=FF1VhYDlgAUbxq8cNYhpD9Z@O@<(hR(Y3ZA8 z$Z)U;+zuUCa6Ilc<)8aHOx6sdUS-=!PzV%zK`%g=rYt zJF{cFSt-1b&kM)2JQsBXo-b>E)m3uNfLC&X+EuD4xoR#B!}aF6)%vxmY#-HRn~3_L z%P5lNQ7(q-M$^}PF|^3)UFlF_b-QxZiQYD*flv5O&1m5)T@gX8c8U6RB6fx-;*wBW zaIJ_D;)7V@*BY`Y5xm5VUsjI%&NU6u+4P1SGk6&?J92E8lfJG5lGmP`90uuyiqYFf zxtceMq!`I97)2aow3;>#9?gl-4Y1L%r?4MJXU1vV743AvqKn;*9vmgzq3UTI1E&?) zMP6AX9mfgsc9P`w7^#8d^q-=?l|r7Tnc*vZP3}zKC*-Jw=KSar*yGQTis3d=FVKCX zt7ikfuV0|=#s>DEwbItuItJ3#_&N@yt)uH0G8Sp;8Af9G8+{MRNgM|60oXM5A%%YQ z;xJ(y#t41m6!0W{2LI`5&^rD+zQGv+MnLc_NrtOD&XN=-`$6PzjsTx0Z5*r@6C_x4 dygN!W6(?(u9mt}Q>IITxxEPK3Isun}{{Y)ayNmz; delta 499 zcmZ{gze>YU7{$*`jK#KUthTjPtJXhA9jZ7=5egL?6t$CMXfGOQjiiZ?L41aiL2&XB z6a>*hoP82UpFlh})*?ce@8ocQ_xC0FNZ!Wc?_V#k04iAR#*fl|N4j-mdE!a8BVdw?JinlTA(fX)>W=R= zp7IUfO)zWNEm`ei5CZoC;y3wX9jqS Sf4q4VNorV%=5qfxtN`ChE>a}`